OpenCV 掩膜的应用

掩膜是用选定的图像、图形或物体,对要处理的图像进行遮挡,来控制图像 处理的区域。

在数字图像处理中,通常使用二维矩阵数组进行掩膜。掩膜是由0和1组成一个二进制图像,利用该掩膜图像要处理的图像进行掩膜,其中1值的区域被处理,0 值区域被屏蔽,不会处理。

掩膜的主要用途是:

  • 提取感兴趣区域:用预先制作的感兴趣区掩模与待处理图像进行”与“操作,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0。
  • 屏蔽作用:用掩模对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计。
  • 结构特征提取:用相似性变量或图像匹配方法检测和提取图像中与掩模相似的结构特征。
    特殊形状图像制作
    掩膜在遥感影像处理中使用较多,当提取道路或者河流,或者房屋时,通过一个掩膜矩阵来对图像进行像素过滤,然后将需要的地物或者标志突出显示出来。

使用cv.calcHist()来查找完整图像的直方图。
如果要查找图像某些区域的直方图,只需在要查找直方图的区域上创建一个白色的掩膜图像,否则创建黑色, 然后将其作为掩码mask传递即可。

bitwise_and(src1, src2, dst=None, mask=None)
  • src1、src2:为输入图像或标量,标量可以为单个数值或一个四元组
  • dst:可选输出变量,如果需要使用非None则要先定义,且其大小与输入变量相同
  • mask:图像掩膜,可选参数,为8位单通道的灰度图像,用于指定要更改的输出图像数组的元素,即输出图像像素只有mask对应位置元素不为0的部分才输出,否则该位置像素的所有通道分量都设置为0

返回值为结果图像矩阵,如果dst传入了实参,则返回值与dst对应 实参相同。

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt

# 1. 直接以灰度图的方式读入
img = cv.imread('./1.png', 0)

# 2. 创建蒙版
mask = np.zeros(img.shape[:2], np.uint8)
mask[100:150, 400:480] = 1  # 选定感兴趣区域 1或255

# 3.掩模
masked_img = cv.bitwise_and(img, img, mask=mask)

# 4. 统计掩膜后图像的灰度图
mask_histr = cv.calcHist([img], [0], mask, [256], [0, 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_histr)
axes[1, 1].grid()
axes[1, 1].set_title("灰度直方图")
plt.show()

掩膜后的数据
OpenCV 掩膜的应用_第1张图片

OpenCV 掩膜的应用_第2张图片

你可能感兴趣的:(OpenCV)