码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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进行深拷贝和浅拷贝的示例代码:

    1. // 浅拷贝
    2. cv::Mat shallowCopy = image;
    3. // 深拷贝
    4. cv::Mat deepCopy;
    5. image.copyTo(deepCopy);
    6. // 修改浅拷贝的图像
    7. shallowCopy.at<cv::Vec3b>(0, 0) = cv::Vec3b(0, 0, 255);
    8. // 显示原图、浅拷贝和深拷贝的图像
    9. imwrite("/sdcard/DCIM/Original_Image.jpg", image);
    10. imwrite("/sdcard/DCIM/Shallow_Copy.jpg", shallowCopy);
    11. imwrite("/sdcard/DCIM/Deep_Copy.jpg", deepCopy);
    12. }

    我们读取一张图像image。然后,我们进行了浅拷贝和深拷贝。

    浅拷贝的示例代码使用了简单的赋值操作符=将image赋值给shallowCopy,这只是复制了指针,所以两个图像将共享相同的图像数据。如果我们修改了shallowCopy,原始图像image也会受到影响。

    深拷贝的示例代码使用了copyTo()函数将image的像素数据复制到新的deepCopy对象中。这样每个对象都有独立的像素数据。即使我们修改了deepCopy,原始图像image也不会受到影响。

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

  • 相关阅读:
    Arduino从零开始(2)——控制舵机与步进电机
    Springboot毕设项目物品捎带系统41pudjava+VUE+Mybatis+Maven+Mysql+sprnig)
    Windows10安装麒麟桌面V10双系统
    Nginx 面试 40 问
    2023华为杯数学建模D题第三问-碳排放路径优化(能源消费结构调整的多目标优化模型构建详细过程+模型假设(可复制))
    spring-boot-admin-starter-server监控springboot项目
    Kubernetes 数据存储:从理论到实践的全面指南
    npm install 报node-sass command failed
    二进制十六机制CRC总和异或等工具类
    校园安防监控系统升级改造方案:如何实现设备利旧上云与AI视频识别感知?
  • 原文地址:https://blog.csdn.net/weixin_63357306/article/details/132640809
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号