opencv中copyTo函数的使用

opencv中copyTo函数的使用我们已经知道的是 使用 copyTo 函数可以得到一个复制的矩阵 A copyTo B 就可以得到和 A 一毛一样的矩阵 B 当然需要事先声明 B 并且两者可以互不相关的做各种操作 copyTo 还有一个重构函数 copyTo B MASK 意思是可以得到一个附加掩膜 MASK 的矩阵 B 我们从图像的角度来看这个函数的作用 首先需要生成一张掩膜 MASK 一般情况下这个膜和你需要操作的对象图像一样大

我们已经知道的是,使用copyTo函数可以得到一个复制的矩阵。

A.copyTo(B);

就可以得到和A一毛一样的矩阵B。当然需要事先声明B。并且两者可以互不相关的做各种操作。

copyTo还有一个重构函数copyTo(B,MASK)。意思是可以得到一个附加掩膜MASK的矩阵B。我们从图像的角度来看这个函数的作用。

首先需要生成一张掩膜MASK,一般情况下这个膜和你需要操作的对象图像一样大。生成方法见下面例子:

Mat MASK(A.rows,A.cols,CV_8UC3,Scalar(0,0,0));//生成一个三通道的彩色掩膜,初始化为黑色。

Mat
 MASK(A.
rows
,A.
cols
,
CV_8UC1
,
Scalar
(
0
));//生成一个灰度的掩膜,初始化为黑色。

Mat MASK=Mat::zeros(A.size( ), CV_8UC3);//生成一个三通道的彩色掩膜,初始化为黑色。需要改成灰度的只需把CV_8UC3改为CV_8UC1。

对一幅图加一个掩膜顾名思义,就是想要盖住图片的某一部分。所以使用A.copyTo(B,MASK)之后得到的是A被MASK掩盖后的图像。因为初始化的掩膜时黑色的,如果直接加上去整个图片都会被掩盖了,所以需要把一部分你不想盖住的位置改成别的颜色。这里就可以用到前面的设置ROI的算法。

Mat mm=mask(Rect(0,0,mask.cols/2,mask.rows));//设置一个只有掩膜一半大小的ROI

mm={
Scalar(255,255,255)};//把ROI中的像素值改为白色。

得到的掩膜效果如下图:

opencv中copyTo函数的使用

对于灰度图像,掩盖后在图像中掩膜中所有像素值对应为0的点变为黑色(被掩盖),其他点(所有非0值)和原来一致。

对于三通道彩色图像,某个通道中所有在掩膜中值为0的点在该通道上的像素值变为0,其他所有非0值保持和原来不变。例如当对绿色和蓝色通道加掩膜时会呈现一种图像被盖了一层红色的效果。(因为蓝色和绿色被掩盖了)

不管是灰度图像还是彩色图像,只有掩膜中像素值为0的点会对图像产生掩盖效果。

以下分别是黑色掩膜,红色掩膜的效果图:

opencv中copyTo函数的使用

opencv中copyTo函数的使用




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220583.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午8:08
下一篇 2026年3月17日 下午8:08


相关推荐

  • CLion2022.01.13激活码(JetBrains全家桶)

    (CLion2022.01.13激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年4月1日
    103
  • 《NX-OS与Cisco Nexus交换技术:下一代数据中心架构(第2版)》一2.8 Cisco FabricPath…

    《NX-OS与Cisco Nexus交换技术:下一代数据中心架构(第2版)》一2.8 Cisco FabricPath…本节书摘来自异步社区 NX OS 与 CiscoNexus 交换技术 下一代数据中心架构 第 2 版 一书中的第 2 章 第 2 8 节 作者 美 RonFuller CCIE 5851 DavidJansen CCIE 5952 MatthewMcPhe 更多章节内容可以访问云栖社区 异步社区 公众号查看 2 8 CiscoFabri

    2026年3月19日
    2
  • margin 等高布局

    margin 等高布局

    2022年1月21日
    42
  • Vue的axios封装

    Vue的axios封装Vue 的 axios 封装在 vue 项目中 经常需要封装 axios 文档又看不懂 所以总结一下方法 安装 npminstallax 安装 axios 引入在项目的 src 目录中 新建一个 request 文件夹 然后在里面新建一个 http js 和一个 api js 文件 http js 文件用来封装我们的 axios api js 用来统一管理我们的接口 在 http js 中引入 axiosimporta axios 引入 axiosimportQ

    2025年7月10日
    6
  • synchronized 和Lock区别

    synchronized 和Lock区别区别如下 来源 lock 是一个接口 而 synchronized 是 java 的一个关键字 synchronized 是内置的语言实现 异常是否释放锁 synchronized 在发生异常时候会自动释放占有的锁 因此不会出现死锁 而 lock 发生异常时候 不会主动释放占有的锁 必须手动 unlock 来释放锁 可能引起死锁的发生 所以最好将同步代码块用 trycatch 包起来 finall

    2025年10月24日
    5
  • Lombok插件的安装和使用「建议收藏」

    Lombok插件的安装和使用「建议收藏」IDEA中安装Lombok插件打开IDEA的Setting–>选择Plugins选项–>选择Browserepositories–>搜索lombok–>点击安装–>安装完成重启IDEA–>安装成功后重启IDEA引入lombok的jar包<dependency&

    2025年9月7日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号