图像掩模(image mask):用选定的图像、图形或物体,对待处理的图像(局部或全部)进行遮挡来控制图像处理的区域或处理过程。由于覆盖的特定图像或物体称为掩模或模板。
数字图像处理中,掩模为二维矩阵数组,有时也为多值图像。图像掩模主要用于:
1.提取感兴趣区,用预先制作的感兴趣区掩模与待处理图像相乘,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0;
2.屏蔽作用,用掩模对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计;
3.结构特征提取,用相似性变量或图像匹配方法,检测和提取图像中与掩模相似的结构特征;
4.特殊形状图像的制作。
import numpy as np
import cv2image = cv2.imread("F:/pp.jpg") #读图
#cv2.imshow("Oringinal", image) #显示原图
print(image.shape[:2])#输入图像是RGB图像,故构造一个三维数组,四个二维数组是mask四个点的坐标,
site = np.array([[[500, 300], [250,300], [250, 5], [500, 5]]], 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) #图像一直显示,键盘按任意键即可关闭窗口
注:
1.说明:在这种情况下,用cv2.namedWindow()函数可以指定窗口是否可以调整大小。在默认情况下,标志为cv2.WINDOW_AUTOSIZE。但是,如果指定标志为cv2.WINDOW_Normal,则可以调整窗口的大小。当图像尺寸太大,并在窗口中添加跟踪条时,这些操作可以让我们的工作更方便一点。
2.第一个二维数组坐标[500,300]是下图x4,第二个二维数组坐标[250,300]是下图x3,第三个二维数组坐标[250,5]是下图x1,第四个二维数组坐标[500,5]是下图x2。
二维数组中,第一个是横坐标,第二个是纵坐标,其中,x1_x = x3_x, x1_y = x2_y, x2_x = x4_x, x3_y = x4_y。
原图:
mask:
加mask之后:
参考:https://baike.baidu.com/item/%E5%9B%BE%E5%83%8F%E6%8E%A9%E6%A8%A1/4857425
https://blog.csdn.net/wuguangbin1230/article/details/80606155
https://blog.csdn.net/liuqipao55/article/details/80297933