OpenCV中vector<Mat>数据存储问题

问题:定义数组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 AA;
Mat aa= Mat::zeros(1,3,CV_64FC1); 
 
// 循环1:
aa.at(0,1)=1;
AA.push_back(aa) ;

// 循环2:
aa.at(0,1)=2;
AA.push_back(aa) ;

则AA[0]与 AA[1]是一样的,说明 aa.at(0,1)会覆盖上一次修改的值。

二、深拷贝  
//注意:深拷贝

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 <

你可能感兴趣的:(opencv,c++)