OpenCV | Mat类的copyT、clone、=赋值的区别
先说一下Mat类的结构。
Mat类我们可以分成两部分:头部分、矩阵数据部分。
头部分:用于记录矩阵数据的大小、类型、数据指针等信息
矩阵数据部分:实际的矩阵数据。
现在我们有以下图像:
Mat img(Size(300, 300), CV_8UC3, Scalar(255, 0, 0)); // 300X300大小的蓝色图片
Mat img_copy; // 拷贝
Mat img_clone; // 克隆
Mat img_assign; // 赋值
1、clone
img_clone = img.clone();
img_clone与img完全独立,修改img不影响img_clone
2、copyTo
img.copyTo(img_copy);
当img与img_copy大小相同时,直接进行矩阵赋值操作,大小不同时,等同于clone
3、等号‘=’赋值
使用赋值操作后的img_assign,只复制Mat头部有关矩阵大小等信息相关的数据,不复制矩阵数据,也就是说img_assign和img同时指向一块矩阵区域。
img_assign = img;
4、验证
打印一下各个mat的数据区域的内存地址,可以看到img_assign和img的数据指针地址相同,而img_clone和img_copy数据地址各不相同。