是否垫::的push_back(x)的复制X元素?(Does Mat::push_back(x) c

2019-10-19 20:14发布

根据我的理解谦虚,OpenCV中的垫有效地处理了内存管理; 所以复制垫并不意味着他们是“硬/物理”复制; 他们只是参考原文垫。

然而,对于已经被推入到使用的push_back较大的垫垫,是安全的清除他们假设,他们很难复制,不使用复制的同样的技术像x=y

在下面的代码,做bigx仍然有x的内容,甚至释放后后?

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

谢谢 :)

Answer 1:

据我所知垫::反推()将创建源的每个反推的单独副本。 所以,你可以释放推后您的源代码。

参见下文的示例,

   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(); 


Answer 2:

是的,呼吁的push_back拷贝构造函数来创建同一类型的保持原始(源)在自由裁量权的新鲜克隆元素。



文章来源: Does Mat::push_back(x) copy x elements?