图像拷贝分为两类:浅拷贝 和 深拷贝
先简单说说cv::Mat类,该类是用于保存图像以及其他矩阵数据的数据结构。当cv::Mat实例化后分配内存;当对象离开作用域后,分配的内存自动释放。
(一)浅拷贝
浅拷贝时,当图像之间进行赋值,图像数据并未发生复制,两个对象指向同一块内存,改变图像2会影响图像1。
cv::Mat img;
img = image; // 改变image,img随即发生变化
(二)深拷贝
当图像之间进行赋值时,图像数据发生复制,两个对象指向不同的内存,改变图像2不会影响图像1
1、copyTo()
cv::Mat img;
img.copyTo(image);
需要注意的是,copyTo()是否申请新的内存空间,取决于dst矩阵头中的大小信息是否与src一至,若一致则只深拷贝并不申请新的空间,否则先申请空间后再进行拷贝。
2、clone()
cv::Mat img;
img = image.clone();
clone 是完全的深拷贝,在内存中申请新的空间。