3.python-opencv图像mask掩膜处理

3.python-opencv图像mask掩膜处理

第一章 python-opencv-图片导入和显示
第二章 python-opencv图像简单处理


`


前言

本文主要实现只提取图像中的‘花’所在的区域,其他背景区域全部转为黑色。可以使用mask对图像进行掩膜处理,从而提取‘花’部分的ROI,本文主要涉及颜色空间转换、mask设置和按位运算。


一、颜色空间转换

我们主要用到的色彩空间包括: Gray色彩空间,RGB策菜空间和HSV色彩空间。
Gray色彩空间:Gray通常指8位灰度图,像素取值范围[0-255]
RGB色彩空间:RGB颜色可以表示为(Red, Green, Blue)。其中,各个分量的数值越小,亮度越低。数值越大,亮度越高;如:(0,0,0)表示黑色,(255,255,255)表示白色
HSV色彩空间:HSV色彩空间包括Hue色调、Saturation饱和度、Value亮度。opencv中把色调的取值范围映射到[0,180],数值和颜色的的对应为:0-红色、30-黄色、60-绿色、90-青色、120-蓝色、150-品红色。.opencv中把饱和度的取值范围映射到[0,255],数值越大饱和度越高。opencv中把亮的取值范围映射到[0,255],0表示黑色,255表示白色。

色彩空间转换函数如下,其中src为需要转换的图片,code表示转换方法,
cv2.COLOR_BGR2GRAY:表示从BGR转换位灰度图像。
cv2.COLOR_BGR2HSV:表示从BGR转换位HSV。

cvtColor(src, code, dst=None, dstCn=None)

在python-opencv中的使用方法

cv2.cvtColor(picture, code = cv2.COLOR_BGR2HSV)

二、mask设置

根据蓝色的范围标记图片中的蓝色区域的ROI,使用inRange函数,inRange 表示是否在lower_blue-upper_blue范围内,在则为255,不在则为0,其中src为需要转换的图片,lowerb, upperb分别表示颜色范围上下限。

inRange(src, lowerb, upperb, dst=None)

在python-opencv中的使用方法

mask = cv2.inRange(picture, lower_blue, upper_blue)

经过mask的设置后,图像只存在0和255像素值,即只有黑白,白色区域即为要找的ROI,黑色区域为背景区域。

三、按位运算

图像的与运算主要用于获取某个图像中感兴趣的部分,是针对两个图像矩阵数组或一个数组与标量的按位与,按位与运算的函数如下,其中每个参数表示为:
src1、src2:为输入图像或标量,标量可以为单个数值或一个四元组
dst:可选输出变量,如果需要使用非None则要先定义,且其大小与输入变量相同
mask:图像掩膜,可选参数,为8位单通道的灰度图像,用于指定要更改的输出图像数组的元素,即输出图像像素只有mask对应位置元素不为0的部分才输出,否则该位置像素的所有通道分量都设置为0。

bitwise_and(src1, src2, dst=None, mask=None)

按位与运算在opencv中的用法

cv2.bitwise_and(picture1, picture2, mask=mask)

总结

本文主要讲了mask掩膜处理,首先将图像有RGB转化为HSV颜色空间,然后根据像素值确定ROI区域,最后根据按位与运算将ROI区域提取。完整代码如下:

import cv2
import numpy as np

if __name__ == '__main__':
	#加载图片
    img1 = cv2.imread('./rose.png')
    #颜色空间转换
    img2 = cv2.cvtColor(img1, code = cv2.COLOR_BGR2HSV)  #颜色空间的转变
    #在HSV里面设置blue的上下限
    lower_blue = np.array([110, 50, 50])  #浅蓝色
    upper_blue = np.array([130, 255, 255])  #深蓝色
    #根据蓝色的范围标记图片中那些是蓝色
    #inRange 表示是否在lower_blue-upper_blue范围内,在则为255,不在则为0
    mask = cv2.inRange(img2, lower_blue, upper_blue)
    #按位与运算
    res = cv2.bitwise_and(img1, img1, mask=mask)
    #显示原图
    cv2.imshow('orange',img1)
	#显示变换后的图片
    cv2.imshow('hsv', res)
    #关闭窗口
    cv2.waitKey(0)
    #销毁内存
    cv2.destroyAllWindows()

运行结果
在这里插入图片描述

### Python OpenCV 中的掩膜使用方法 在图像处理过程中,掩膜Mask)是一种非常有用的工具。它允许对特定区域应用操作而忽略其他部分。下面将详细介绍如何创建和使用掩膜。 #### 创建简单的掩膜并执行加法运算 为了展示掩膜的工作原理,可以先定义两个简单的小型灰度图像 `img1` 和 `img2` ,以及一个同样大小但大部分像素值为零的掩膜矩阵 `mask` 。只有当掩膜对应位置上的元素不为零时,才会对该处的目标图与源图做相应的算术逻辑运算[^3]。 ```python import cv2 import numpy as np # 定义两张4x4的单通道图像 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) # 设置掩膜右下角2x2区域内有效(白色) mask[2:4, 2:4] = 1 print("Image 1:\n", img1) print("\nImage 2:\n", img2) print("\nMask:\n", mask) # 应用掩膜后的相加结果存储到新变量中 result = cv2.add(img1, img2, mask=mask) print("\nResult after applying mask and addition operation:") print(result) ``` 这段代码会打印出原始两幅图像的内容、所使用的掩膜形状及其数值分布情况;最后还会显示经过掩膜筛选之后再进行逐点相加的结果。可以看到,在未被遮挡的地方保持不变,而在有掩膜覆盖的位置则进行了正常的累加计算。 #### 更复杂的例子:基于颜色范围构建掩膜 除了上述基本示例外,还可以利用色彩空间转换函数如 `cv2.cvtColor()` 来获取 HSV 或 LAB 等不同模式下的表示形式,并据此设定阈值条件从而得到更精确的颜色选取效果。例如: ```python import cv2 import numpy as np # 加载彩色图片作为输入样本 image_bgr = cv2.imread('example.jpg') # 转换成HSV格式方便后续处理 hsv_image = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2HSV) # 设定目标物体颜色区间上下限(HSV) lower_bound = (30, 150, 50) upper_bound = (70, 255, 255) # 构建二值化掩膜 mask_color_based = cv2.inRange(hsv_image, lower_bound, upper_bound) # 将原图与生成好的掩膜相结合获得最终输出 output_image = cv2.bitwise_and(image_bgr, image_bgr, mask=mask_color_based) # 展现各个阶段成果对比 cv2.imshow('Original Image', image_bgr) cv2.imshow('Color Mask', mask_color_based) cv2.imshow('Filtered Result', output_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 此段程序展示了怎样依据指定色调范围建立合适的掩膜来突出感兴趣的对象特征,同时抑制背景干扰项的影响。这有助于提高识别精度或简化进一步分析任务前的数据预处理工作量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值