opencv中mat类型数据的操作和内存

Mat是opencv中的一种矩阵数据类型,用来存储图像。Mat类包含两个数据部分:矩阵头和指向存储所有像素值的矩阵的指针。矩阵头包含矩阵的大小尺寸、存储方法、存储地址等。在opencv中,对矩阵Mat的复制分为深复制和浅复制,与c++中的深拷贝和浅拷贝类似,深复制创建了一个读取部分的矩阵头,而浅复制只是拥有自己矩阵头,与原像素矩阵共用一个矩阵数据。所以在浅复制中,改变其中一项的像素值,其他的都会改变。
如果Mat类自己申请数据空间,则会多申请4个字节用来存储数据被引用的次数。

  • 浅复制

Mat A,B;
A = imread("dog.jpg");
Mat C(A);
B = C;
Mat D(A,Rect(10,10,100,100));
//Mat D = A(Rect(10,10,100,100));

在上面的代码中,A,B,C,D共用一个数据矩阵。如下图:
opencv中mat类型数据的操作和内存_第1张图片

  • 深复制
Mat A = imread("dog.jpg");
Mat B = A.clone();
Mat C;
A.copyTo(C);

你可能感兴趣的:(图像处理)