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,一经查实,立即删除!

相关文章

【Express.js】基于业务特性的分布式结构

基于业务特性的分布式结构 上节的mvc架构,把所有不同模块的同层文件都放在一个目录下 我们也可以将你的项目结构按照业务模块进行划分,每一个模块内可以再按mvc分层,或者不分,这样子把不同模块独立出来的就叫做分布式结构(dcs) …

2. CSS3的新特性

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

js常用功能方法

一. 从0~9十个数字中随机选出5个数 function randomFive(){var arr [0,1,2,3,4,5,6,7,8,9];var out [];var num 5;while(out.length < num){var temp (Math.random()*arr.length) >> 0;out.push(arr.splice(temp,1));}return out}二. JS去掉字符串前后空格或去掉…

【详细介绍分析golang中map的相关知识】

golang-map 定义和初始化操作和访问添加和修改元素删除元素获取元素判断键是否存在遍历map 常见应用场景 Golang中的map是一种非常强大和灵活的数据结构&#xff0c;它可以用来存储键值对。在本文中&#xff0c;我们将深入探讨Golang中map的相关知识&#xff0c;包括其定义、初…

1.7 运维可以转行什么

文章目录 运维可以转行什么1. 云计算与DevOps2. 信息安全3. 数据分析与大数据4. 项目管理5. 咨询与培训结论 运维可以转行什么 运维&#xff08;Operations and Maintenance&#xff0c;简称O&M&#xff09;是信息技术领域中的重要职能&#xff0c;负责管理和维护企业的信…

代码随想录一刷day50

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣123.买卖股票的最佳时机III二、力扣● 188.买卖股票的最佳时机IV 前言 一、力扣123.买卖股票的最佳时机III class Solution {public int maxProfit(i…

拖动排序功能的实现 - 使用HTML、CSS和JavaScript

引言 在现代Web应用程序中&#xff0c;拖动排序是一种常见的用户界面交互方式&#xff0c;它允许用户通过拖动元素来重新排列列表或项目的顺序。本文将介绍如何使用HTML、CSS和JavaScript来实现手动拖动排序功能。 一、HTML结构 首先&#xff0c;我们需要定义一个列表&#…

电子病历编辑器源码

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

利用深度学习进行黑白照片着色:使用 Keras 构建 GAN 进行照片自动上色的详细实践指南

利用深度学习进行黑白照片着色&#xff1a;使用 Keras 构建 GAN 进行照片自动上色的实践指南 在这篇博客文章中&#xff0c;我们将探讨一个具有挑战性的问题&#xff0c;即如何利用深度学习自动为黑白照片上色。传统的图片上色过程是一个艰苦且劳动密集型的过程&#xff0c;必…

Cannot get a STRING value from a NUMERIC cell

Cannot get a STRING value from a NUMERIC cell 错误一&#xff1a; 导入Excel表格数据&#xff0c;该列设置数据类型为String&#xff0c;输入数据是int类型 解决方法&#xff1a;cell.setCellType(CellType.STRING); 错误二&#xff1a;日期类型需要定义格式 解决方法如下&a…

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

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

autok3s k3d rancher研究

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

沉淀自己的pro-table组件,并发布到npm(Vue3、element-plus)

文章目录 沉淀自己的pro-table组件&#xff0c;并发布到npmQuick Start开发过程笔记add TS Support 参考资料 沉淀自己的pro-table组件&#xff0c;并发布到npm 传送门 约定&#xff1a;npm包名vue3-el-pro-table&#xff0c;引用vue3-el-pro-table的包名为“本项目”。 声明…

Oracle EBS 客制化AP发票无法验证和关联交易的AR事务处理无法创建

背景: 在某项目上,国外账套上线以后,国外法人所有单据使用英文(US);涉及关联交易时,如国外公司使用英文环境创建AP发票,国内公司使用中文环境创建AR事务处理。 问题症状: 1、客制化AP发票接口API采用异步方式处理,每次从客制化AP发票接口表中取一定记录条数批量处理,…

iOS开发 - appstore评价与app内展示appstore

iOS开发 - appstore评价与app内展示appstore 之前开发中遇到app内通过广告直接展示某个app的appstore信息页面。StoreKit提供了SKStoreProductViewController可以app中直接访问app store 而不需要跳转到app store 一、代码实现 #import "SDStoreProductManager.h"…

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

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

MySQL切分函数substring()的具体使用

目录 一、LEFT() 函数 二、RIGHT() 函数 三、SUBSTRING() 函数 四、SUBSTRING_INDEX() 函数 五、实战操作 MySQL字符串截取函数主要有&#xff1a;left(), right(), substring(), substring_index() 四种。各有其使用场景。今天&#xff0c;让我带大家花几分钟时间来熟知它…

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

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

打磨投资论(宏观指标篇)|底层逻辑

前言&#xff1a; 根据某次美国社融通胀数据&#xff0c;预期CPI 3.1&#xff0c;实际3.0&#xff0c;说明通货膨胀水平减缓&#xff0c;有改善&#xff0c;加息概率减少&#xff0c;降息概率加大&#xff0c;钱流入市场的概率增加&#xff0c;利好股市&#xff0c;也利好黄金…

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

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