苏州网站建站推广,网站开发的整体职业规划,百度推广一年大概需要多少钱,汕头网站关键排名在OpenCV中#xff0c;拷贝图像数据时有两种方式#xff1a;深拷贝#xff08;Deep Copy#xff09;和浅拷贝#xff08;Shallow Copy#xff09;。这两种拷贝方式的主要区别在于是否创建新的图像副本。
浅拷贝#xff08;Shallow Copy#xff09;是指将图像对象的指针… 在OpenCV中拷贝图像数据时有两种方式深拷贝Deep Copy和浅拷贝Shallow Copy。这两种拷贝方式的主要区别在于是否创建新的图像副本。
浅拷贝Shallow Copy是指将图像对象的指针复制给另一个对象这两个对象将共享相同的图像数据。当对其中一个图像进行修改时另一个图像也会受到影响。这是因为只复制了指针而没有创建新的图像数据。
深拷贝Deep Copy是指创建一个新的图像对象并复制原始图像的像素数据到新对象中。这样每个图像对象都拥有自己的独立像素数据修改一个图像不会影响其他图像。
深拷贝函数copyTo() void cv::copyTo ( InputArray src, OutputArray dst, InputArray mask src待拷贝图像。dst:深拷贝后的图像。mask:深拷贝时的掩码矩阵 void cv::Mat::copyTo ( OutputArray m InputArray mask ) m:深拷贝后的图像。mask:深拷贝时的掩码矩阵。
下面是使用OpenCV进行深拷贝和浅拷贝的示例代码 // 浅拷贝
cv::Mat shallowCopy image;// 深拷贝
cv::Mat deepCopy;
image.copyTo(deepCopy);// 修改浅拷贝的图像
shallowCopy.atcv::Vec3b(0, 0) cv::Vec3b(0, 0, 255);// 显示原图、浅拷贝和深拷贝的图像
imwrite(/sdcard/DCIM/Original_Image.jpg, image);imwrite(/sdcard/DCIM/Shallow_Copy.jpg, shallowCopy);imwrite(/sdcard/DCIM/Deep_Copy.jpg, deepCopy);}
我们读取一张图像image。然后我们进行了浅拷贝和深拷贝。
浅拷贝的示例代码使用了简单的赋值操作符将image赋值给shallowCopy这只是复制了指针所以两个图像将共享相同的图像数据。如果我们修改了shallowCopy原始图像image也会受到影响。
深拷贝的示例代码使用了copyTo()函数将image的像素数据复制到新的deepCopy对象中。这样每个对象都有独立的像素数据。即使我们修改了deepCopy原始图像image也不会受到影响。
在实际编程中根据需求你可以选择使用深拷贝或浅拷贝来处理图像数据。通常情况下建议使用深拷贝来创建独立的图像副本以免不必要的共享和意外修改。