Mat::push_back(x) 是不是复制 x 元素?
Posted
技术标签:
【中文标题】Mat::push_back(x) 是不是复制 x 元素?【英文标题】:Does Mat::push_back(x) copy x elements?Mat::push_back(x) 是否复制 x 元素? 【发布时间】:2014-04-11 09:25:31 【问题描述】:根据我的拙见,OpenCV 的 Mat 可以有效地处理内存管理;所以复制 Mats 并不意味着它们是“硬/物理”复制的;他们只是指原始垫子。
但是,对于已使用 push_back 推入更大 Mat 的垫子,是否可以安全地清除它们,假设它们是硬复制的,而不是使用与 x=y
中相同的复制技术?
在下面的代码中,bigx
释放了x
的内容后,还是后者的内容吗?
Mat x, bigx;
bigx.push_back(x);
x.release();
谢谢你:)
【问题讨论】:
【参考方案1】:据我所知,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();
【讨论】:
【参考方案2】:是的,push_back 调用复制构造函数来创建一个相同类型的新克隆元素,并自行决定保留原始(源)。
【讨论】:
以上是关于Mat::push_back(x) 是不是复制 x 元素?的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 2.x 中,是不是有办法检查字符串是不是可以转换为整数? [复制]
Python 是不是有更简洁的方式来表达“如果 x 包含 a|b|c|d...”? [复制]
如何在浏览器 JavaScript 中检测 OS X 是不是处于暗模式? [复制]