Est-ce que Mat :: push_back (x) copie x éléments?

Basé sur mon humble compréhension, le logiciel OpenCV gère efficacement la gestion de la mémoire; donc copier des tapis ne signifie pas qu’ils sont copiés “durement / physiquement”; ils se réfèrent simplement au tapis d’origine.

Cependant, pour les tapis insérés dans un plus gros tapis à l’aide de push_back, est-il prudent de les effacer en supposant qu’ils ont été copiés, sans utiliser la même technique de copie que dans x=y ?

Dans le code suivant, bigx t- bigx toujours le contenu de x même après avoir publié ce dernier?

 Mat x, bigx; bigx.push_back(x); x.release(); 

Je vous remercie 🙂

Autant que je sache, Mat :: pushback () créera une copie séparée de la source à chaque refoulement. Ainsi, vous pouvez libérer votre source après le refoulement.

Voir un exemple ci-dessous,

  Mat src=imread("src.jpg",1); int rowSize=src.rows; Mat A; A.push_back(src.reshape(0,1)); src.release(); Mat B; B = A.row(0).clone(); imshow("src",B.reshape(0,rowSize)); waitKey(); 

Oui, push_back appelle le constructeur de copie pour créer un nouvel élément de clone du même type en conservant l’original (source) à la discrétion.