当前位置: 首页 > news >正文

图像预处理-图像掩膜

一.掩膜简介

        掩膜通常是一个二值化图像,并且与原图像的大小相同,其中目标区域被设置为1(或白色255),而其他区域被设置为0(黑色),并且目标区域可以根据HSV的颜色范围进行修改。

二.制作掩膜

mask=cv.inRange(img,color_low,color_high)

cv2.inRange 用于进行多通道图像(尤其是彩色图像)的阈值操作

首先要把彩图(RGB)转换为HSV颜色空间,然后用之前HSV取值范围来取出特定颜色

(img,(hmin,smin,vmin),(hmax,smax,vmax)),一般后两个参数传用np创建的数组

# 导入opencv和numpy
import cv2 as cv
import numpy as np# 读取图片
img = cv.imread('../images/demo.png')# 图太大了修改一下大小
img_re = cv.resize(img, (480,480))
# 显示原图
cv.imshow('tym_1', img_re)# 转换为HSV格式
img_hsv = cv.cvtColor(img_re, cv.COLOR_BGR2HSV)# 设定绿色颜色范围
lower_green =  np.array([35, 43, 46])
higer_green =  np.array([77, 255, 255])# 创建掩膜
mask = cv.inRange(img_hsv, lower_green, higer_green)# 显示掩膜
cv.imshow('tym_2', mask)
cv.waitKey(0)
cv.destroyAllWindows()

        这里掩膜和掩膜后图像出现右下角的白色(绿色)轮廓,我认为是这里的四个颜色区域的边缘并没有严格使用该区域的颜色,右下角黄色区域的边缘含有绿色,所以会在掩膜和掩膜后图像中显示。

注意掩膜虽然是用HSV颜色空间创建出来的,但本质上还是二值化图像,只有两种值。

三.与运算

        图像处理中,运算被用来对图像的像素值进行操作,也就是将两个图像中所有的对应像素值一一进行运算,从而得到新的图像。

cv2.bitwise_and(src1,src2[,mask])

参数:

- src1:通常是输入的原始图像。

- src2:它可以是另一个图像、一个常数值或者与 `src1` 相同的图像。

  - 应用掩膜时,这个参数经常就是`src1`本身;即对同一个图像进行操作。

  - 若对两个不同的图像执行按位与操作(例如,将两张图片的某些部分组合在一起),可以分别将它们作为 src1 src2

- mask掩膜(可选)。输入数组元素只有在该掩膜非零时才被处理。是一个8位单通道的数组,尺寸必须与 src1 src2 相同。

        通过掩膜原图的与运算,就可提取出图像中被掩膜覆盖的区域(扣图)。但这个函数需要我们传入更多参数,前面必须传入 src1 和 src2 两图,所以进行掩膜与运算时把 src2 输入成第一张图就行了,相当于原图自己做操作。

# 导入opencv和numpy
import cv2 as cv
import numpy as np# 读取图片
img = cv.imread('../images/demo.png')# 图太大了修改一下大小
img_re = cv.resize(img, (480,480))
# 显示原图
cv.imshow('tym_1', img_re)# 转换为HSV格式
img_hsv = cv.cvtColor(img_re, cv.COLOR_BGR2HSV)# 设定绿色颜色范围
lower_green =  np.array([35, 43, 46])
higer_green =  np.array([77, 255, 255])# 创建掩膜
mask = cv.inRange(img_hsv, lower_green, higer_green)# 与运算得到掩膜后图像
res = cv.bitwise_and(img_re, img_re, mask = mask)# 显示掩膜后图像
cv.imshow('tym_2', res)
cv.waitKey(0)
cv.destroyAllWindows()

四.颜色替换

        掩膜原图的大小相同,并且像素位置一一对应,可以通过布尔索引得到掩膜中白色区域的坐标,并将其带入到原图像(RGB颜色空间)中。

# 修改掩膜后指定颜色为蓝色
img_re[mask == 255] = (255,0,0)# 显示修改颜色后的图像
cv.imshow('tym_4', img_re)
cv.waitKey(0)
cv.destroyAllWindows()

        由于掩膜二值化图像,所以只有 255 和 两种值,可以用布尔索引将掩膜中的目标区域(白色)坐标提取出来。然后原图是RGB颜色空间的,所以又使用(B,G,R)的赋值方式修改像素值

相关文章:

  • mysql表类型查询
  • 修改镭神激光雷达ip
  • 数据结构与算法 复习记录(一)
  • 【Python进阶】元组:不可变序列的十大核心应用
  • JavaScript基础-01(笔记)
  • 复旦大学、百度联合开源数字人项目hallo2,支持高分辨率(可达4K)、长视频生成(最多1小时)
  • PyTorch学习-小土堆教程
  • 2025年泰迪杯数据挑战赛B题问题分析
  • 文章记单词 | 第35篇(六级)
  • 等离子体浸没离子注入(PIII)
  • XR技术赋能艺术展演|我的宇宙推动东方美学体验化
  • 50常用控件_QPushButton
  • Linux的目录结构(介绍,具体目录结构)
  • 机器狗运行是否需要服务器分析
  • 【Windows Cmake工程配置Boost库】
  • PyTorch - Tensor 学习笔记
  • python爬虫JavaScript基础
  • Python 第三节 流程控制
  • UDP猜数字游戏与TCP文件传输案例解析
  • AI日报 - 2025年04月17日
  • 沈阳网站开发简维/黑龙江头条今日新闻
  • 罗湖专业做网站公司/东莞企业网站模板建站
  • 网站建设深圳哪家公司好/seo推广软件
  • 四川网站建设/网络推广的基本方法
  • 苹果软件做ppt下载网站有哪些内容吗/深圳seo网络优化公司
  • 网站整体策划与设计/百度推广怎么收费标准案例