问题:定义数组Mat后,通过指针/取元素对Mat数组数据进行修改,会遇到深浅拷贝问题。
原因是:push_back调用的是Mat的浅拷贝函数来拷贝数据,数据共享。
一、浅拷贝
//注意:浅拷贝 - 不复制数据只创建矩阵头,数据共享(更改a,b,c的任意一个都会对另外2个产生同样的作用)
1.Mat定义矩阵,直接矩阵相等:改变其中一个都会改变。
Mat a;
Mat b = a; //a "copy" to b
Mat c(a); //a "copy" to c
2.Mat矩阵 更新,然后再push_back 到容器中
vector
Mat aa= Mat::zeros(1,3,CV_64FC1);
// 循环1:
aa.at
AA.push_back(aa) ;
// 循环2:
aa.at
AA.push_back(aa) ;
则AA[0]与 AA[1]是一样的,说明 aa.at
二、深拷贝
//注意:深拷贝
Mat a;
Mat b = a.clone(); //a copy to b
Mat c;
a.copyTo(c); //a copy to c
实例:
#include
#include
#include
#include
using namespace std;
int main()
{
//1.Mat定义矩阵,直接矩阵相等:改变其中一个都会改变。
Mat a;
a= Mat::zeros(1,3,CV_64FC1);
a.at(0,1)=3;
cout << "1.Mat a=" << a << endl<(0,1)=4;
cout << "2.Mat b=" << b << endl<(0,1)会覆盖上一次修改的值。
cout <