Mat类拷贝方法
博主曾经在编写opencv程序时发现,源图像在没有主动更改的情况下发生了变化。导致这样的原因很可能是Mat类在拷贝时所使用的方法不正确,初学者在不了解opencv内重载了运算符“=”的情况下,容易按照传统的思维来使用Mat B = Mat A
。下面介绍一下Mat类的几种拷贝方法(Mat A
copy to Mat B
):
1.浅拷贝
B = A
B(A)
这类拷贝方法仅创建了新的矩阵头,共用同一个内存空间,在修改新对象的时候,旧对象也会改变。
2.深拷贝
B = A.clone()
A.copyTo(B)
这类拷贝方法为新的矩阵申请了新的内存空间,在修改新对象的时候,旧对象不会改变。
Mat B = Mat A
#include <opencv2\opencv.hpp>
using namespace cv;
int main()
{
Mat src = imread("00.jpg");//input source image
Mat dst = src;//copy image
rectangle(dst, Rect(50, 50, 300, 300), {
0, 0, 255 }, 2, 8);//draw a rectangle
imshow("srcImage",