参考:
https://blog.csdn.net/u013806541/article/details/70154719
https://blog.csdn.net/holybin/article/details/17711013
https://blog.csdn.net/mengchicmc/article/details/69568469
1.“=” 浅拷贝
浅拷贝 - 不复制数据只创建矩阵头,数据共享(更改a,b,c的任意一个都会对另外2个产生同样的作用)
Mat a = imread("1.jpg");
Mat b = a; //a "copy" to b
Mat c(a); //a "copy" to c
a.col(10)=0;//把a的第十列全置0,b和c也相应发生变化
2.“clone()” 完全深拷贝
clone 是完全的深拷贝,在内存中申请新的空间
Mat A = Mat::ones(4,5,CV_32F);
Mat B = A.clone() //clone 是完全的深拷贝,在内存中申请新的空间,与A独立
3.“copyTo()” 也是深拷贝
copyTo 也是深拷贝,但是否申请新的内存空间,取决于dst矩阵头中的大小信息是否与src一至,若一致则只深拷贝并不申请新的空间,否则先申请空间后再进行拷贝.
Mat A = Mat::ones(4,5,CV_32F);
Mat C;
A.copyTo(C) //此处的C矩阵大小与A大小不一致,则申请新的内存空间,并完成拷 贝,等同于clone()
Mat D = A.col(1);
A.col(0).copyTo(D) //此处D矩阵大小与A.col(0)大小一致,因此不会申请空间,而是直接进行拷贝,相当于把A的第1列赋值给第二列