opencv -13 掩模

什么是掩膜?

在OpenCV中,掩模(mask)是一个与图像具有相同大小的二进制图像,用于指定哪些像素需要进行操作或被考虑。掩模通常用于选择特定区域或进行像素级别的过滤操作。

OpenCV 中的很多函数都会指定一个掩模,也被称为掩码,例如:
计算结果=cv2.add(参数 1 , 参数 2 , 掩模)
当使用掩模参数时,操作只会在掩模值为非空的像素点上执行,并将其他像素点的值置为0。
例如,img1、img2、mask 和 img3 的原始值分别为:

在这里插入图片描述
经过 img3=cv2.add(img1,img2,mask=mask)运算后,得到 img3 为:

在这里插入图片描述
在运算过程中,img3 计算的是在掩模 mask 控制下的“img1+img2”结果。在计算时,掩码为 1 的部分对应“img1+img2”,其他部分的像素值均为“0”。
需要说明的是,在运算前,数组 img3 内就存在值,这仅仅是为了说明问题用的,实际上img3 是根据函数 cv2.add()所生成的新数组,与原来的值并没有关系。

上面的示例代码如下:

import cv2
import numpy as np
img1=np.ones((4,4),dtype=np.uint8)*3
img2=np.ones((4,4),dtype=np.uint8)*5
mask=np.zeros((4,4),dtype=np.uint8)
mask[2:4,2:4]=1
img3=np.ones((4,4),dtype=np.uint8)*66
print("img1=\n",img1)
print("img2=\n",img2)
print("mask=\n",mask)print("初始值 img3=\n",img3)
img3=cv2.add(img1,img2,mask=mask)
print("求和后 img3=\n",img3)

运行上述程序,得到如下输出结果:

img1=[[3 3 3 3][3 3 3 3][3 3 3 3][3 3 3 3]]
img2=[[5 5 5 5][5 5 5 5][5 5 5 5][5 5 5 5]]
mask=[[0 0 0 0][0 0 0 0][0 0 1 1][0 0 1 1]]
初始值 img3=[[66 66 66 66][66 66 66 66][66 66 66 66][66 66 66 66]]
求和后 img3=[[0 0 0 0][0 0 0 0][0 0 8 8][0 0 8 8]]

上述例题介绍的是在 cv2.add()函数中使用掩模的情况,在位运算中也都含有掩模参数。在上面集结图像运算的,我们直接使用了按位与运算对原始图像与掩模进行计算的方式。在将彩色图像
与掩模进行计算时,由于按位与操作要求参与运算的数据应该有相同的通道,所以无法直接将
彩色图像与单通道的掩模图像进行按位与操作。我们通过将掩模图像转换为 BGR 模式的彩色图像,让彩色图像与(彩色)掩模图像进行按位与操作,从而实现掩模运算。

实际上,在函数中所使用的掩模参数可以是 8 位单通道图像。所以,可以将掩模图像作为
按位与函数 cv2.bitwise_and( src1, src2[, mask]] )中参数 mask 的值,完成掩模运算。此时,让待
处理的彩色图像同时作为函数 cv2.bitwise_and( src1, src2[, mask]] )的参数 src1 和参数 src2,使
用掩模图像作为掩模参数,完成按位与运算,即可得到由掩模控制的彩色图像

需要注意的是,任何数值与自身进行按位与计算的结果,得到的仍旧是自身的值。例如,
在表 3-11 中,数值 198 与自身进行按位与运算,得到的结果仍旧是 198。

在这里插入图片描述
结论1:所以,在上述操作中,让待处理的彩色图像与自身进行按位与操作,得到的仍是彩色图像
本身。而使用的掩模参数控制的是,在目标图像中,哪些区域的值是彩色图像的值、哪些区域的值是 0。

下面我们拿一张彩色的图片来实验下结论1,构造一个掩模图像,将该掩模图像作为按位与函数的掩模参数,实现保留图像的指定部分。

import cv2
import numpy as np
#读取彩色图像
a=cv2.imread("lena.png",1)
w,h,c=a.shape
mask=np.zeros((w,h),dtype=np.uint8)
mask[100:400,200:400]=255
mask[100:500,100:200]=255c=cv2.bitwise_and(a,a,mask)
print("a.shape=",a.shape)
print("mask.shape=",mask.shape)
cv2.imshow("a",a)
cv2.imshow("mask",mask)
cv2.imshow("c",c)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

运行上述程序,输出结果如图 所示,其中左图为原始图像,中间的图为掩模图像,右图为原始图像与掩模图像进行按位与后的图像,从实验结果可以看出 彩色图像与自身进行按位与操作,得到的仍是彩色图像

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/29536.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab入门

命名规则: clc:清除命令行的所有命令 clear all:清除所有工作区的内容 注释:两个% 空格 %% matlab的数据类型 1、数字 3 3 * 5 3 / 5 3 5 3 - 52、字符与字符串 s a %% 求s的ascill码 abs(s) char(97) num2str(65) str I…

Simulink仿真模块 - Data Store Read

Data Store Read:从数据存储中读取数据 在仿真库中的位置为:Simulink / Signal Routing 模型为: 说明 Data Store Read 模块将指定数据存储中的数据复制到其输出中。多个 Data Store Read 模块可从同一个数据存储读取数据。 用来读取数据的源数据存储由 Data Store Memory 模…

上门服务小程序|上门家政小程序开发

随着现代生活节奏的加快和人们对便利性的追求,上门家政服务逐渐成为了许多家庭的首选。然而,传统的家政服务存在着信息不透明、服务质量不稳定等问题,给用户带来了困扰。为了解决这些问题,上门家政小程序应运而生。上门家政小程序…

自动收小麦机(牛客2023萌新)

题目链接 示例1 输入 复制 4 1 2 1 1 4 5 2 2 2 3 4 输出 复制 10 说明 在第4格放出水流后,水流会流向第3格,由于第3格高度比第4格低,所以水流继续向左流向第2格,因为平地水流只能流2格,所以到达第2格后水流停…

sqli-labs 堆叠注入 解析

打开网页首先判断闭合类型 说明为双引号闭合 我们可以使用单引号将其报错 先尝试判断回显位 可以看见输出回显位为2,3 尝试暴库爆表 这时候进行尝试堆叠注入,创造一张新表 ?id-1 union select 1,database(),group_concat(table_name) from informatio…

店铺记账用什么软件好?应该如何选购?

店铺记账过程中,会遇到各种问题:手写记账容易出错、效率低下、数据容易丢失;手动整理数据导致实际库存和账面库存不匹配,影响补货和订单管理。 而借助专业的店铺记账软件,可以有效解决上面这些问题,通过自动…

TCP的三次握手过程

TCP 是面向连接的协议,所以使用 TCP 前必须先建立连接,而建立连接是通过三次握手来进行的。三次握手的过程如下图: 刚开始客户端处于 closed 的状态,服务端处于 listen 状态。 第一次握手:客户端给服务端发一个 SYN 报…

AI数字人:图像超分辨率模型 Real-ESRGAN

1 Real-ESRGAN介绍 1.1 Real-ESRGAN是什么? Real-ESRGAN全名为Enhanced Super-Resolution GAN:增强的超分辨率的对抗生成网络,是由腾讯ARC实验室发布的一个盲图像超分辨率模型,它的目标是开发出实用的图像/视频修复算法&#xf…

Ceph

Ceph简介 Ceph使用C语言开发,是一个开放、自我修复和自我管理的开源分布式存储系统。具有高扩展性、高性能、高可靠性的优点。Ceph目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack,Kubernetes都可与Ceph整合以支持虚拟机镜像的后端存储…

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序

目录 基本概念 MQ 的优势 1.应用解耦 2.异步提速 3.削峰填谷 MQ 的劣势 使用mq的条件 常见MQ产品 RabbitMQ简介 RabbitMQ的六种工作模式 JMS RabbitMQ安装和配置。 RabbitMQ控制台使用。 RabbitMQ快速入门——生产者 需求: RabbitMQ快速入门——消费者 小结 基本概…

快7月底了,让我康康有多少准备跳槽的

前两天跟朋友感慨,今年的铜三铁四、裁员、疫情影响导致好多人都没拿到offer!现在已经快7月底了,具体金九银十只剩下2个月。 对于想跳槽的职场人来说,绝对要从现在开始做准备了。这时候,很多高薪技术岗、管理岗的缺口和市场需求也…

【RISC-V】昉·星光 2单板计算机初始调试记录

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…