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.