10 -- OpenCV学习—掩膜

掩膜的应用

掩膜是用选定的图像、图形或物体,对要处理的图像进行遮挡,来控制图像处理的区域。
在数字图像处理中,我们通常使用二维矩阵数组进行掩膜。掩膜是由0和1组成一个二进制图像,利用该掩膜图像要处理的图像进行掩膜,其中1值的区域被处理,0值区域被屏蔽,不会处理。

掩膜的主要用途是:

  • 提取感兴趣区域:用预先制作的感兴趣区掩模与待处理图像进行”与“操作,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0。
  • 屏蔽作用:用掩模对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计。
  • 结构特征提取:用相似性变量或图像匹配方法检测和提取图像中与掩模相似的结构特征。
  • 特殊形状图像制作
    掩膜在遥感影像处理中使用较多,当提取道路或者河流,或者房屋时,通过一个掩膜矩阵来对图像进行像素过滤,然后将我们需要的地物或者标志突出显示出来。
    我们使用cv.calcHist()来查找完整图像的直方图。如果要查找图像某些区域的直方图,该怎么办?只需在要查找直方图的区域上创建一个白色的掩膜图像,否则创建黑色,然后将其作为掩码mask传递即可。
示例:
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

# 解决中文显示问题
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 1直接以灰度图的方式读入
img = cv.imread('./images/e.jpg',0)
# 2创建蒙版
mask = np.zeros(img.shape[:2], np.uint8)
mask[400:650, 200:500]=255
# 3掩模
masked_img = cv.bitwise_and(img, img, mask = mask)
# 4统计掩膜后图像的灰度图
mask_his = cv.calcHist([img], [0], mask, [256], [1, 256])
# 5图像展示
fig, axes=plt.subplots(nrows=2, ncols=2, figsize=(10, 8))
axes[0, 0].imshow(img, cmap=plt.cm.gray)
axes[0, 0].set_title("原图")
axes[0, 1].imshow(mask, cmap=plt.cm.gray)
axes[0, 1].set_title("蒙版数据")
axes[1, 0].imshow(masked_img, cmap=plt.cm.gray)
axes[1, 0].set_title("掩膜后数据")
axes[1, 1].plot(mask_his)
axes[1, 1].grid()
axes[1, 1].set_title("灰度直方图")
plt.show()

运行结果:
10 -- OpenCV学习—掩膜_第1张图片

你可能感兴趣的:(OpenCV学习笔记,opencv,计算机视觉,python)