OPENCV深拷贝和浅拷贝

来源:互联网 发布:德语助手软件注册码 编辑:程序博客网 时间:2024/06/07 06:30

 浅拷贝:也就是在对象复制时,只是对对象中的数据成员进行简单的赋值,如果对象中存在动态成员,即指针,浅拷贝就会出现问题。

深拷贝:对于深拷贝,针对成员变量存在指针的情况,不仅仅是简单的指针赋值,而是重新分配内存空间。深拷贝采用了在堆内存中申请新的空间来存储数据,这样每个可以避免指针悬挂。

用一句简单的话来说就是浅拷贝只是对指针的拷贝,拷贝后两个指针指向同一个内存空间,深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针。

Mat src;    src = imread("C:\\Users\\934554314\\Desktop\\1.jpg", 0);    Mat dst;    dst = src;    blur(src, dst, Size(3, 3), Point(0, 0), 4);    namedWindow("src", CV_NORMAL);    imshow("src", src);    namedWindow("dst", CV_NORMAL);    imshow("dst", dst);

浅拷贝,结果一致这里我们在处理dst这个图片的时候,相当于就是处理src,因为这属于浅拷贝,直接把src的数据给到dst.因此最后的结果就是src和dst的数据一致。

Mat src;    src = imread("C:\\Users\\934554314\\Desktop\\1.jpg", 0);    Mat dst;    //dst = src.clone();//这两种方法都是属于深拷贝    src.copyTo(dst);    blur(src, dst, Size(3, 3), Point(0, 0), 4);    namedWindow("src", CV_NORMAL);    imshow("src", src);    namedWindow("dst", CV_NORMAL);    imshow("dst", dst);

深拷贝,结果不一致
这里因为做了深拷贝,相当于复制了一个src给到dst,因此结果不一致。