OPENCV深拷贝和浅拷贝

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wuguanghao/article/details/77322823

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

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

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

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,因此结果不一致。

猜你喜欢

转载自blog.csdn.net/wuguanghao/article/details/77322823