图像掩模
- 目标
- 1. 图像掩模的概念
- 2. 图像掩模的作用
- 3. 示例演示
目标
本篇文章主要介绍图像掩模的概念、作用、及其简单实现。
1. 图像掩模的概念
图像掩模(image mask)是用选定的图像、图形或物体,对待处理的图像(局部或全部)进行遮挡来控制图像处理的区域或处理过程。由于覆盖的特定图像或物体称为掩模或模板。
2. 图像掩模的作用
数字图像处理中,掩模为二维矩阵数组,有时也为多值图像。图像掩模主要用于:
- 提取感兴趣区,用预先制作的感兴趣区掩模与待处理图像相乘,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0。
- 屏蔽作用,用掩模对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计。
- 结构特征提取,用相似性变量或图像匹配方法,检测和提取图像中与掩模相似的结构特征。
- 特殊形状图像的制作。
3. 示例演示
import numpy as np
import cv2image = cv2.imread("lena.jpg") # 读图
cv2.imshow("Oringinal", image) #显示原图
print(image.shape[:2])# 输入图像是RGB图像,故构造一个三维数组,四个二维数组是mask四个点的坐标,
site = np.array([[[350, 400], [200, 400], [200, 190], [350, 190]]], dtype=np.int32)im = np.zeros(image.shape[:2], dtype="uint8") # 生成image大小的全黑图cv2.polylines(im, site, 1, 255) # 在im上画site大小的线,1表示线段闭合,255表示线段颜色
cv2.fillPoly(im, site, 255) # 在im的site区域,填充颜色为255mask = im
cv2.namedWindow('Mask', cv2.WINDOW_NORMAL) # 可调整图像窗口大小,不加这句不可调整
cv2.imshow("Mask", mask)
masked = cv2.bitwise_and(image, image, mask=mask) # 在模板mask上,将image和image做“与”操作
cv2.namedWindow('Mask to Image', cv2.WINDOW_NORMAL) # 同上
cv2.imshow("Mask to Image", masked)
cv2.waitKey(0) # 图像一直显示,键盘按任意键即可关闭窗口
注意:
- 用
cv2.namedWindow()
函数可以指定图像窗口是否可以调整大小。在默认情况下,标志为cv2.WINDOW_AUTOSIZE
。但是,如果指定标志为cv2.WINDOW_Normal
,则可以调整窗口的大小。当图像尺寸太大,并在窗口中添加跟踪条时,这些操作可以较好的解决结果图像显示问题。bitwise_and
是对二进制数据进行“与”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“与”操作,1&1=1,1&0=0,0&1=0,0&0=0
bitwise_or
是对二进制数据进行“或”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“或”操作,1|1=1,1|0=0,0|1=0,0|0=0
bitwise_xor
是对二进制数据进行“异或”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“异或”操作,11=0,10=1,01=1,00=0
bitwise_not
是对二进制数据进行“非”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“非”操作,1=0,0=1
二维数组中,第一个是横坐标,第二个是纵坐标。第一个二维数组坐标[350,400]
是下图x4
,第二个二维数组坐标[200,400]
是下图x3
,第三个二维数组坐标[200,190]
是下图x1
,第四个二维数组坐标[350,190]
是下图x2
。