Bonjour à tous,

Je vous montre d'abord le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
   std::vector<cv::Mat> tabMat;
 
  cv::Mat img(cv::Size(1,1), CV_8U);
  img.at<uint8_t>(0, 0) = 5;
 
  {
    cv::Mat imgClone;
    img.copyTo(imgClone);
    tabMat.push_back(imgClone);
  }
 
  std::cout << static_cast<int>(tabMat.at(0).at<uint8_t>(0, 0)) << std::endl;
  std::cout << static_cast<int>(img.at<uint8_t>(0, 0)) << std::endl;
comme vous le voyez je créée dans un scope un objet imgClone, puis je l'insère dans mon vector, le problème c'est qu'en faisant ça j'appelle le constructeur de cv::Mat et le passage se fait par référence. Ce qui me gene c'est que la variable imgClone va être libérée en mémoire dans la pile à la sortie du scope et donc lorsque je ferai tabMat.at(0).at<uint8_t>(0, 0)) pour récupérer ma valeur, bah je peux récupérer n'importe quoi car plus tard dans mon code une variable peut prendre la place de la pile ou j'avais créée mon objet imgClone, or je n'ai jamais d'erreur en ajoutant des variables à la suite de ce code et je ne comprend pas pourquoi.

J'espère que vous avez compris mon problème de compréhension

Merci d'avance pour votre aide