OpenCV python 掩模处理学习笔记

article/2025/10/1 2:41:54

OpenCV python 掩模处理

  • 前言
  • 1.1 掩模是什么
  • 1.2 掩模的原理
  • 1.3 构造掩模图像
  • 总结


前言

接上篇OpenCV Python 直方图的使用。在opencv中使用掩模对图像进行处理是一个十分常用的方法。本篇是记录掩模操作的原理及使用。小白入门,如有不正确的地方希望大佬指正。


提示:需要引入numpy

1.1 掩模是什么

个人理解,掩模就是一层玻璃板,你可以指定哪一部分是透明的,哪一部分是不透明的,然后将掩模罩在需要处理的图片上。上图就很容易理解了:
在这里插入图片描述
左边的是原图,中间的就是掩模,而右边的则是将原图与掩模经行按位与操作之后的得到的图像。

1.2 掩模的原理

在掩模运算中使用了“与”和“或”运算,利用电路图就可以很好的理解。
在这里插入图片描述
与运算和串联电路是相对应的。如上图左侧串联电路,只有当两个开关都是闭合时,电路才是接通的,对应到数值运算上,只有参与运算的数值都为1时,与运算结果才是1。

或运算和并联电路相对应,任意一个开关闭合,电路都是接通的,对应到数值运算上,参与或运算的数值只要有一个值是1,或运算的结果就是1。

掩模操作主要用到的是按位“与运算”。其语法格式为dst = cv2.bitwise_and(src1,src2[,mask]])

在进行按位与运算时,需要先将参与运算的值转换为二进制数,然后将对应位上的值经行与运算。

按位与操作有以下特点:
1、将任何数值N与数值0经行按位与操作,都将会得到数值0。
2、将任何数值N(这里仅考虑8位值)与数值255(8位二进制数是1111 1111)进行按位与操作,都会得到数值N本身。

举个易于理解的小栗子:
在这里插入图片描述
上述运算是直接对两个数值进行运算的,理解起来比较方便。在实际处理中,要先将像素点处理成二进制,在进行按位与操作。 并且通常将掩模图像白色区域设置为255。(下面细说)

按位与运算深度剖析:
在这里插入图片描述
如上例,将像素值35和像素值126分别转成二进制后经行按位与操作。当二者都为”1“时,结果才为真,否者为假,即”0“。

根据与运算的法则,任意一个数值与数值1进行与运算,结果等于其自身的值。因此,任意一个8位像素值与二进制数”1111 1111“进行按位与运算,得到的都是自身的值。二进制”1111 1111“对应的十进制数是”255“,所以任意一个8位像素值与”255“进行按位与运算,得到的都是自身原来的值。这就是为什么实际应用中构建掩模用255的原因。

综上,将一幅图片与掩模经行按位与操作之后,得到的图像有以下两部分:
1、与掩模图像中黑色背景位置对应的部分,该部分的像素值被置为0。
2、与掩模图像中白色背景位置对应的部分,该部分像素保留原有值。

理解掩模运算的原理之后,我们来试着构造掩模吧。

1.3 构造掩模图像

在构造掩模图像时,通常先构造一个像素值都是0的二维数组,再将数组中指定区域的像素设定为255,就得到了掩模图像。
举个例子:

import cv2
import numpy as np
mask = np.zeros([300,300],np.uint8)      #用numpy生成一个全为0的,300*300的二维数组
mask[50:200,50:200]=255                  #将其中的50~200行,50~200列赋值为255
cv2.imshow("mask",mask)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述
像这样就创建了一个大小为300*300,其中50到200行、50到200列为白色的掩模图像。

注意对两张图像进行按位与操作前提是要两张图像的大小相同,所以对图像进行掩模操作的时候要构造原图大小的二维数组

举个例子:

import cv2
import numpy as np
img = cv2.imread(r"D:\lesson\lena.jpg")
print(img.shape)                       #打印一下shape值
mask = np.zeros(img.shape,np.uint8)    #构建与原图shape值相同的mask
mask[50:200,50:200]=255
img1 = cv2.bitwise_and(img,mask)       #将图像与掩模经行按位与操作
cv2.imshow("img",img)
cv2.imshow("mask",mask)
cv2.imshow("img1",img1)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述
完结。

总结

例如:以上就是今天要讲的内容,本文仅仅简单介绍了OpenCV中掩模的使用,欢迎大家进行补充。寒假打卡不能停!

http://chatgpt.dhexx.cn/article/d0y88fN5.shtml

相关文章

OpenCV基于Python图像掩模处理

图像掩模 目标1. 图像掩模的概念2. 图像掩模的作用3. 示例演示 目标 本篇文章主要介绍图像掩模的概念、作用、及其简单实现。 1. 图像掩模的概念 图像掩模(image mask)是用选定的图像、图形或物体,对待处理的图像(局部或全部&a…

CodedStereo:大尺度景深双目视觉的相位掩模学习(CVPR2021)

点击上方“3D视觉工坊”,选择“星标” 干货第一时间送达 来源丨泡泡机器人SLAM 作者丨泡泡机器人 标题:CodedStereo: Learned Phase Masks for LargeDepth-of-Field Stereo 作者:Shiyu Tan, Yicheng Wu, Shoou-I Yu, Ashok Veeraraghavan 机构…

OpenCV笔记整理【直方图和掩模】

1. 直方图: 直方图统计图像中各个灰度级出现的次数,横坐标为各个像素点的灰度级,纵坐标是具有该灰度级的像素个数。 上面这个九宫格我们可以想象成一张图像,里面的数字代表当前像素的灰度等级。 用图表显示:X轴代表…

数字图像处理 掩模

将logo叠加在图片上 将logo图片进行灰度化阈值处理得到掩模 (需要的部分是置非0 不需要的黑色的部分置0) 然后需要利用掩模对logo图像和人物图像分别进行处理 对logo图: 需要把黑色部分去掉-----与掩模进行与操作把黑色部分置0 Ps:黑色部分用add叠加时相当于没有…

OpenCV基本功 之 图像的掩模、运算 合并专题 -小啾带学【Python-Open_CV系列(七)】

OpenCV图像的掩模、运算 与 合并专题 【Python-Open_CV系列(七)】 文章目录 1.图像的掩模2.图像的运算2.1 图像的加法运算2.1.1 “”方法2.1.2 cv2.add()方法2.1.3 使用掩模遮盖相加结果 2.2 图像的位运算2.2.1 按位与 cv2.bitwise_and()2.2.2 按位或 c…

空间掩模matlab,浅谈基于SLM的非相干全息系统掩模设计及成像处理

宋冲 摘要:基于空间光调制器(Spatial Light Modulator,SLM)的菲涅尔非相干相关数字全息系统,无需对物体在空间或时间上进行扫描,可以快速获取真实三维物体的全息图,在荧光生物样品显微成像、彩色全息显示、以及自适应光学等领域展示了极大应用潜力。通过本项目的研究,为S…

matlab 掩模,用于图像中的与脸部有关的选择和处理的图像掩模制造技术

【技术实现步骤摘要】 【国外来华专利技术】【专利说明】用于图像中的与脸部有关的选择和处理的图像掩模相关串请的交叉引用本申请要求对通过完全引用而结合于此、提交于2013年5月14日的第13/894,384号美国专利申请的优先权。 技术介绍 数字相机的流行和便利以及因特…

图像掩模matlab,图像掩模_matlab_图像掩模

光学图像处理中,掩模可以足胶片、滤光片等。数字图像处理中,掩模为二维矩阵数组,有时也用多值图像。数字图像处理中,图像掩模主要用于:①提取感兴趣区,用预先制作的感兴 未来手机触摸屏要靠无掩模光刻技术_多点触摸 337x396 - 29KB - JPEG 5.4.3 选择式掩模平滑 - 51CTO.COM 53…

图像中的掩膜(Mask)是什么

项目github地址:bitcarmanlee easy-algorithm-interview-and-practice 欢迎大家star,留言,一起学习进步 在图像处理中,经常会碰到掩膜(Mask)这个词。那么这个词到底是什么意思呢?下面来简单解释一下。 1.什么是掩膜 …

第三章-OpenCV基础-4-掩模

基本概念 掩模,又称为掩膜,掩码,模板。图像掩模是指,用特定的图像/图形/物体遮挡代处理的图像(全部或局部),从而控制图像处理的区域,在数字图像处理中,掩模就是一个指定的数组,毕竟,图像也是数组。 左边图为原图,中间图为掩模(白色区域为透明区域,黑色区域为黑色遮挡区域),经过…

在微信小程序中如何引入iconfont

在微信小程序如何引用iconfont? 1.首先进入iconfont 选择自己喜欢的图标 iconfont-阿里巴巴矢量图标库 2.选择自己喜欢的图标加入购物车 3.将图标添加至项目(如果没有项目就随便新建一个项目) 4.打开个人主页 找到自己的项目,点…

微信小程序引入iconfont

第一种 在tabBar中使用 只能下载到本地,放在文件夹中使用 如下图: 第二种 在页面内使用iconfont图标 1:复制代码 2:粘贴到wxss文件里 3:在app.wxss中引入该文件 4:就可以在文件里面使用iconfont图…

微信小程序中使用tabBar

文章目录 前景知识小程序项目app.jsonpages/home/home.wxmlpages/camera/camera.wxmlpages/user/user.wxml 相关链接 前景知识 前面我们学习过:在app.json里对小程序进行全局配置,app.json的文件内容是一个JSON对象,包含很多属性&#xff0c…

微信小程序|icon列表跳转不同界面

效果&#xff1a; 包含图片、文字&#xff0c;分列布局&#xff0c;点击对应图标跳转到相应界面 WXML&#xff1a; <!-- 三个主要功能:文书服务&#xff0c;在线咨询&#xff0c;律师匹配跳转到对应页面&#xff0c;可以返回注意php后台和数据库搭建--><view class&…

微信小程序引入阿里巴巴icon步骤及报错解决

首先将选择好的图标加入购物车,点击右上角购物车图标&#xff0c;将其添加进项目中。(Add To Project) 添加进入项目后&#xff0c;会自动跳转到该项目&#xff0c;选择Download Code&#xff0c; 解压缩包&#xff0c;只会用到文件夹中的4个文件&#xff0c;将解压后的下面4个…

微信小程序引入iconfont图标

一、查看iconfont项目设置 二、生成在线链接 为什么要生成在线链接&#xff0c;因为微信小程序不能用静态文件 三、根据下载的iconfont.css配置app.wxss 下载的iconfont.css配置 自定义app.wxss配置 为什么不直接用iconfont.css&#xff0c;因为微信小程序不支持css只支持wxss…

《微信小程序-进阶篇》组件封装-Icon组件的实现(一)

大家好&#xff0c;这是小程序系列的第九篇文章&#xff0c;从这篇开始我们将进入提高篇&#xff0c;在这一个阶段&#xff0c;我们的目标是可以较为深入的了解组件化开发&#xff0c;并且实践积累一些后续项目也就是原神资料站中用得着的组件&#xff1a; 1.《微信小程序-基础…

uniapp与微信小程序引入iconfont

加入购物车&#xff0c;下载解压 引入 uniapp 微信小程序 使用 icon更新后更换线上url&#xff0c;就不用每次下载解压

微信小程序引入下载至本地的iconfont图标

在写小程序项目中遇到icon图标引入不起作用&#xff0c;原因是因为小程序必须先转为base64引入&#xff01; 第一步 选好自己要用的icon图标并下载至本地 下载后得到这样目录的文件 第二步 转换成base64 网址&#xff1a;https://transfonter.org/ 选择后缀为.ttf的文件 第…

《微信小程序-进阶篇》组件封装-Icon组件的实现(二)

大家好&#xff0c;这是小程序系列的第十篇文章&#xff0c;在这一个阶段&#xff0c;我们的目标是 由简单入手&#xff0c;逐渐的可以较为深入的了解组件化开发&#xff0c;并且实践积累一些后续项目也就是原神资料站中用得着的组件&#xff1a; 1.《微信小程序-基础篇》带你了…