Does OpenCV cv::Mat perform a deep copy?
发布时间
阅读量:
阅读量
注释中记载了数据拷贝是否实际发生。
所谓深度复制,即生成的mat对象具备独立的元素存储区域。而浅层复制则仅生成mat的头部信息,其内部元素存储仍与其他对象共享。
cv::Mat change(cv::Mat mat)
{
cv::Mat m5 = mat;//未发生数据拷贝
m5.at<float>(0,0) = 1000;//所有mat里这这个值都变成了1000!!!!
return m5;//未发生数据拷贝
}
class A
{
public:
A(cv::Mat mat):a(mat.clone()){}//需要用这种clone的方式初始化a,否则a和外部的mat还是使用
//同一块data,外部mat被修改后,a也被修改
//A(cv::Mat mat):a(mat){}
void print()
{
std::cout<<a<<std::endl;
}
cv::Mat a()
{
return a.clone();//返回的时候也需要clone(),否则外部一样可以修改到a
}
private:
cv::Ma
全部评论 (0)
还没有任何评论哟~
