Mat :: push_back(x)是否复制x个元素?

时间:2014-04-11 09:25:32

标签: c++ opencv vector mat

基于我的谦虚理解,OpenCV的Mat有效地处理内存管理;所以复制Mats并不意味着它们被“硬/物理”复制;他们只是提到原来的Mat。

然而,对于使用push_back被推入更大Mat的垫子,可以安全地清除它们,假设它们是硬复制的,而不是像x=y那样使用相同的复制技术吗?

在下面的代码中,bigx即使在发布后者之后仍然有x的内容吗?

Mat x, bigx;
bigx.push_back(x);
x.release();
谢谢你:)

2 个答案:

答案 0 :(得分:4)

据我所知,Mat :: pushback()将在每次回送时创建一个单独的源副本。因此,您可以在推迟后释放源。

见下面的例子,

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

答案 1 :(得分:1)

是的,push_back调用复制构造函数来创建一个相同类型的新克隆元素,保留原始(源)。