自己做的网站会被黑吗,西安企业网站开发,开创集团万网站建设,wordpress支持的语言包问题#xff1a;定义数组Mat后#xff0c;通过指针/取元素对Mat数组数据进行修改#xff0c;会遇到深浅拷贝问题。 原因是#xff1a;push_back调用的是Mat的浅拷贝函数来拷贝数据#xff0c;数据共享。
一、浅拷贝 //注意#xff1a;浅拷贝 - 不复制数据只创建矩阵头定义数组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 到容器中 vectorMat AA; Mat aa Mat::zeros(1,3,CV_64FC1); // 循环1 aa.atdouble(0,1)1; AA.push_back(aa) ;
// 循环2 aa.atdouble(0,1)2; AA.push_back(aa) ;
则AA[0]与 AA[1]是一样的说明 aa.atdouble(0,1)会覆盖上一次修改的值。
二、深拷贝 //注意深拷贝
Mat a; Mat b a.clone(); //a copy to b Mat c; a.copyTo(c); //a copy to c
实例
#include iostream
#include vector#includeopencv2/opencv.hpp
#includeopencv2/highgui/highgui.hppusing namespace std;int main()
{//1.Mat定义矩阵直接矩阵相等:改变其中一个都会改变。Mat a;a Mat::zeros(1,3,CV_64FC1); a.atdouble(0,1)3;cout 1.Mat a a endlendl; // Mat b a; //a copy to bMat c(a); //a copy to cb.atdouble(0,1)4;cout 2.Mat b b endlendl; // cout 2.Mat a a endlendl; // c.atdouble(0,1)5;cout 3.Mat b b endlendl; // cout 3.Mat a a endlendl; //cout 3.Mat c c endlendl; // //2.Mat矩阵 更新然后再push_back 到容器中vectorMat AA;Mat aa Mat::zeros(1,3,CV_64FC1); for(int i0; i3;i){if (i0) // 循环1{aa.atdouble(0,1)1;}if (i1) // 循环2{aa.atdouble(0,1)2;}AA.push_back(aa) ;}cout AA容器大小 AA.size() AA.size(); //直接输出AA的长度 for(int j0; j3;j){cout AA[j]j ]: AA[j] endlendl; // }// 则AA[0]与 AA[1]是一样的说明 aa.atdouble(0,1)会覆盖上一次修改的值。cout endl;system(pause);return 0;
}