【OpenCV 完整例程】18. 图像的掩模加法

【OpenCV 完整例程】18. 图像的掩模加法

欢迎关注 『OpenCV 完整例程 100 篇』 系列,持续更新中
欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中

图像掩模(image mask),也常被写成 “图像掩膜”,是用特定的图像或函数对另一图像进行覆盖或遮蔽,以控制图像处理的区域或图像处理的过程。图像掩模常用于提取感兴趣区域(ROI)、提取结构特征,或制作特殊形状的图像。

用于遮蔽的图像或函数,称为掩模、掩像、模板或遮罩(mask)。对图像进行处理时,被遮蔽的区域不参加处理,或不参加处理参数的计算;或者相反地,仅对被遮蔽的区域进行处理或统计。

函数 cv2.add() 用于图像的加法运算,可以使用掩模图像进行遮蔽。

cv2.add(src1, src2 [, dst[, mask[, dtype]]) → dst

掩模图像中的黑色区域(数值为 0),cv2.add 的输出也为黑色(数值为 0);掩模图像中的非黑色区域(非 0 值),cv2.add 的输出为加法输出。换句话说,函数 cv2.add 进行加法运算,对被掩模图像遮蔽的黑色区域不进行处理,保持黑色。

注意事项:

  1. 掩模图像 mask 为 8位灰度格式,遮蔽区域为黑色(数值为 0),非遮蔽区域为白色(数值为 255),也称为开窗区域、窗口。
  2. 掩模图像与进行加法运算的图像 src1, src2 的形状必须相同。

基本例程:1.27 图像的掩模加法

    # 1.27 图像的加法 (掩模 mask)
    img1 = cv2.imread("../images/imgLena.tif")  # 读取彩色图像(BGR)
    img2 = cv2.imread("../images/imgB3.jpg")  # 读取彩色图像(BGR)

    Mask = np.zeros((img1.shape[0], img1.shape[1]), dtype=np.uint8)  # 返回与图像 img1 尺寸相同的全零数组
    xmin, ymin, w, h = 180, 190, 200, 200  # 矩形裁剪区域 (ymin:ymin+h, xmin:xmin+w) 的位置参数
    Mask[ymin:ymin+h, xmin:xmin+w] = 255  # 掩模图像,ROI 为白色,其它区域为黑色
    print(img1.shape, img2.shape, Mask.shape)

    imgAddMask1 = cv2.add(img1, img2, mask=Mask)  # 带有掩模 mask 的加法
    imgAddMask2 = cv2.add(img1, np.zeros(np.shape(img1), dtype=np.uint8), mask=Mask)  # 提取 ROI

    cv2.imshow("MaskImage", Mask)  # 显示掩模图像 Mask
    cv2.imshow("MaskAdd", imgAddMask1)  # 显示掩模加法结果 imgAddMask1
    cv2.imshow("MaskROI", imgAddMask2)  # 显示从 img1 提取的 ROI
    key = cv2.waitKey(0)  # 等待按键命令

例程说明 1.27:

本例程运行结果如下。

imgAddMask1 是标准的掩模加法,在窗口区域将 img1 与 img2 进行饱和加法,其它区域为黑色遮蔽。imgAddMask2 中加法运算的第二图像是全黑图像(数值为 0),掩模加法的结果是从第一图像中提取遮蔽窗口,该操作生成的图像是从原图中提取感兴趣区域(ROI)、黑色遮蔽其它区域。

【OpenCV 完整例程】18. 图像的掩模加法_第1张图片


(本节完)


版权声明:

youcans@xupt 原创作品,转载必须标注原文链接

Copyright 2021 youcans, XUPT

Crated:2021-11-18


欢迎关注 『OpenCV 完整例程 100 篇』 系列,持续更新中
欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中

【OpenCV 完整例程】01. 图像的读取(cv2.imread)
【OpenCV 完整例程】02. 图像的保存(cv2.imwrite)
【OpenCV 完整例程】03. 图像的显示(cv2.imshow)
【OpenCV 完整例程】04. 用 matplotlib 显示图像(plt.imshow)
【OpenCV 完整例程】05. 图像的属性(np.shape)
【OpenCV 完整例程】06. 像素的编辑(img.itemset)
【OpenCV 完整例程】07. 图像的创建(np.zeros)
【OpenCV 完整例程】08. 图像的复制(np.copy)
【OpenCV 完整例程】09. 图像的裁剪(cv2.selectROI)
【OpenCV 完整例程】10. 图像的拼接(np.hstack)
【OpenCV 完整例程】11. 图像通道的拆分(cv2.split)
【OpenCV 完整例程】12. 图像通道的合并(cv2.merge)
【OpenCV 完整例程】13. 图像的加法运算(cv2.add)
【OpenCV 完整例程】14. 图像与标量相加(cv2.add)
【OpenCV 完整例程】15. 图像的加权加法(cv2.addWeight)
【OpenCV 完整例程】16. 不同尺寸的图像加法
【OpenCV 完整例程】17. 两张图像的渐变切换
【OpenCV 完整例程】18. 图像的掩模加法
【OpenCV 完整例程】19. 图像的圆形遮罩
【OpenCV 完整例程】20. 图像的按位运算
【OpenCV 完整例程】21. 图像的叠加
【OpenCV 完整例程】22. 图像添加非中文文字
【OpenCV 完整例程】23. 图像添加中文文字
【OpenCV 完整例程】23. 图像添加中文文字
【OpenCV 完整例程】24. 图像的仿射变换
【OpenCV 完整例程】25. 图像的平移
【OpenCV 完整例程】26. 图像的旋转(以原点为中心)
【OpenCV 完整例程】27. 图像的旋转(以任意点为中心)
【OpenCV 完整例程】28. 图像的旋转(直角旋转)
【OpenCV 完整例程】29. 图像的翻转(cv2.flip)
【OpenCV 完整例程】30. 图像的缩放(cv2.resize)
【OpenCV 完整例程】31. 图像金字塔(cv2.pyrDown)
【OpenCV 完整例程】32. 图像的扭变(错切)
【OpenCV 完整例程】33. 图像的复合变换
【OpenCV 完整例程】34. 图像的投影变换
【OpenCV 完整例程】35. 图像的投影变换(边界填充)
【OpenCV 完整例程】36. 直角坐标与极坐标的转换
【OpenCV 完整例程】37. 图像的灰度化处理和二值化处理

你可能感兴趣的:(OpenCV,完整例程,100,篇,opencv,图像处理,python)