OpenCV(十五):拷贝图像

在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.at<cv::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也不会受到影响。

在实际编程中,根据需求,你可以选择使用深拷贝或浅拷贝来处理图像数据。通常情况下,建议使用深拷贝来创建独立的图像副本,以免不必要的共享和意外修改。

相关推荐
工程师老罗6 分钟前
Pytorch如何加载和读取VOC数据集用来做目标检测?
人工智能·pytorch·目标检测
测试_AI_一辰6 分钟前
Agent & RAG 测试工程05:把 RAG 的检索过程跑清楚:chunk 是什么、怎么来的、怎么被命中的
开发语言·人工智能·功能测试·自动化·ai编程
Henry-SAP7 分钟前
SAP(ERP) 组织结构业务视角解析
大数据·人工智能·sap·erp·sap pp
龙腾亚太7 分钟前
航空零部件加工变形难题破解:数字孪生 + 深度学习的精度控制实战
人工智能·深度学习·数字孪生·ai工程师·ai证书·转型ai
Coding茶水间8 分钟前
基于深度学习的输电电力设备检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
开发语言·人工智能·深度学习·yolo·目标检测·机器学习
是Dream呀8 分钟前
基于深度学习的人类活动识别模型研究:HAR-DeepConvLG的设计与应用
人工智能·深度学习
啟明起鸣14 分钟前
【C++ 性能提升技巧】C++ 的引用、值类型、构造函数、移动语义与 noexcept 特性,可扩容的容器
开发语言·c++
故以往之不谏16 分钟前
函数--值传递
开发语言·数据结构·c++·算法·学习方法
jkyy201421 分钟前
健康座舱:健康有益赋能新能源汽车开启移动健康新场景
人工智能·物联网·汽车·健康医疗
冀博28 分钟前
从零到一:我如何用 LangChain + 智谱 AI 搭建具备“记忆与手脚”的智能体
人工智能·langchain