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.mzph.cn/news/4110.shtml

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

相关文章

2. CSS3的新特性

2.1 CSS3的现状 ●新增的CSS3特性有兼容性问题, ie9才支持 ●移动端支持优于PC端 ●不断改进中 ●应用相对广泛 ●现阶段主要学习: 新增选择器和盒子模型以及其他特性 CSS3给我们新增了选择器,可以更加便捷,更加自由的选择目标元素: 1.属性选择器 2.结构伪类选择器…

电子病历编辑器源码

电子病历系统采取结构化与自由式录入的新模式,自由书写,轻松录入。化实现病人医疗记录(包含有首页、病程记录、检查检验结果、医嘱、手术记录、护理记录等等。)的保存、管理、传输和重现,取代手写纸张病历。不仅实现了…

朝花夕拾 - 2023 精神错乱记录

jsliang 的精神错乱记录,一点 2023 小思考。 也许我们曾偏离航道,但请不要放弃抵达终点 前言 在 2020.11 过来珠海,来到金山工作 2 年半的时间里: 在工作上,更换了 3 个小团队,达到了每年一换在工作上&…

autok3s k3d rancher研究

参考 功能介绍 | Rancher文档AutoK3s 是用于简化 K3s 集群管理的轻量级工具,您可以使用 AutoK3s 在任何地方运行 K3s 服务。http://docs.rancher.cn/docs/k3s/autok3s/_index 什么是 AutoK3s k3s是经过完全认证的 Kubernetes 产品,在某些情况下可以替…

linux之Ubuntu系列(四)用户管理 用户和权限 chmod 超级用户root, R、W、X、T、S 软链接和硬链接 shell

r(Read,读取):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目 录的权限。 w(Write,写入):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移…

恢复配置并减少网络停机时间

随着众多公司努力在商业世界中崭露头角,拥有可靠的 IT 基础架构比以往任何时候都更加重要。组织需要维护一个稳定的网络环境,避免不合时宜的网络中断以及网络连接中断、声誉受损、应用程序不可用和数据丢失。 Network Configuration Manager 提供了一种…

LLM微调 | LoRA: Low-Rank Adaptation of Large Language Models

🔥 发表于论文:(2021) LoRA: Low-Rank Adaptation of Large Language Models 😄 目的:大模型预训练微调范式,微调成本高。LoRA只微调新增的小部分参数。 文章目录 1、背景2、动机3、LoRA原理4、总结 1、背景 adapter…

LSTM对比Bi-LSTM的电力负荷时间序列预测(Matlab)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Linux 学习记录52(ARM篇)

Linux 学习记录52(ARM篇) 本文目录 Linux 学习记录52(ARM篇)一、汇编语言相关语法1. 汇编语言的组成部分2. 汇编指令的类型3. 汇编指令的使用格式 二、基本数据处理指令1. 数据搬移指令(1. 格式(2. 指令码类型(3. 使用示例 2. 立即数(1. 一条指令的组成 3. 移位操作指令(1. 格式…

[QT编程系列-13]:QT快速学习 - 1- 初识

目录 第1章 QT的介绍 1.1 QT VS MFC 1.2 QT历史 1.3 QT的应用 1.4 QT学习方法 1.5 QT对象树 1.6 2-8定律 1.7 QT优势: 1.8 QT支持的平台 第2章 QT UI是各种控件对象的堆积 第3章 QT UI是各种控件的堆积 第4章 控件窗口的控制 第1章 QT的介绍 1.1 QT V…

回归预测 | MATLAB实现Attention-GRU多输入单输出回归预测(注意力机制融合门控循环单元,TPA-GRU)

回归预测 | MATLAB实现Attention-GRU多输入单输出回归预测----注意力机制融合门控循环单元,即TPA-GRU,时间注意力机制结合门控循环单元 目录 回归预测 | MATLAB实现Attention-GRU多输入单输出回归预测----注意力机制融合门控循环单元,即TPA-G…

GUI-Menu菜单实例(颜色+线型菜单)

运行代码: //GUI-Menu菜单实例(颜色线型菜单) #include"std_lib_facilities.h" #include"GUI/Simple_window.h" #include"GUI/GUI.h" #include"GUI/Graph.h" #include"GUI/Point.h"struc…

JS-27 前端数据请求方式;HTTP协议的解析;JavaScript XHR、Fetch的数据请求与响应函数;前端文件上传XHR、Fetch;安装浏览器插件FeHelper

目录 1_前端数据请求方式1.1_前后端分离的优势1.2_网页的渲染过程 – 服务器端渲染1.3_网页的渲染过程 – 前后端分离 2_HTTP协议的解析2.1_HTTP概念2.2_网页中资源的获取2.3_HTTP的组成2.4_HTTP的版本2.5_HTTP的请求方式2.6_HTTP Request Header2.7_HTTP Response响应状态码 3…

创建、发布npm包,并且应用在项目里面

实现一个函数去监听dom宽高的变化,并且发布NPM包,然后使用到项目中 步骤 1.5W3H 八何分析法 2.如何监听dom宽高变化 3.如何用vite 打包库 4.如何发布npm 一、NPM包新建过程 查看完整目录 1.生成 package.json npm init生成TS配置文件 tsconfig.js…

第二十一章:CCNet:Criss-Cross Attention for Semantic Segmentation ——用于语义分割的交叉注意力

0.摘要 全图像依赖关系为视觉理解问题提供了有用的上下文信息。在这项工作中,我们提出了一种称为Criss-Cross Network(CCNet)的方法,以更有效和高效的方式获取这种上下文信息。具体而言,对于每个像素,CCNet…

禁止浏览器自动填充密码功能,设置自动填充背景色。

禁止浏览器自动填充密码功能,设置自动填充背景色 1、禁止浏览器自动填充密码功能2、设置自动填充背景色(阴影效果) 1、禁止浏览器自动填充密码功能 text设置autocomplete“off” password设置 autocomplete“new-password” 两个一起设置&am…

Python Web框架 Flask 安装、使用

Python Web框架 Flask 安装 安装 Flask 框架 首先需要安装 Flask 框架, 可以通过以下命令安装: [rootlocalhost web]# pip3 install Flask Collecting FlaskDownloading Flask-2.0.3-py3-none-any.whl (95 kB)|██████████████████████████████…

websoket

websoket是html5新特性, 它提供一种基于TCP连接上进行全双工通讯的协议; 全双工通信的意思就是:允许客户端给服务器主动发送信息,也支持服务端给另一个客户端发送信息. Websoket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在we…

Appium: Windows系统桌面应用自动化测试(四) 【辅助工具】

[TOC](Appium: Windows系统桌面应用自动化测试(四) 辅助工具) 文件批量上传 文件批量上传和文件单个上传原理是相同的,单个上传直接传入文件路径即可,批量上传需要进入批量上传的文件所在目录,然后观察选中多个文件时【文件路径输入框】读取…

抖音seo源码-源代码开发搭建-开源部署(不加密)

抖音SEO矩阵系统源码开发功能模型是指在抖音平台上提高视频搜索排名的一种算法模型。该功能模型包括多个部分,如内容优化、用户交互、社交化推广等,通过对这些因素的优化和提升,达到提高视频搜索排名的目的。具体实现包括使用关键词、标签等优…