OpenCV图像掩码(Mask)制作与ROI提取实战
本文详解OpenCV中图像掩码(Mask)的制作与应用。通过矩形和圆形示例,演示如何利用位运算提取感兴趣区域(ROI),实现图像局部截取与透明叠加融合。提供完整Python源码及参数解析,帮助开发者掌握任意形状掩码的生成技巧。
本文介绍如何利用OpenCV生成图像掩码(Mask)。借助位运算与图像掩码技术,我们可以精准锁定图像中的感兴趣区域(ROI),从而提取特定部分的内容。
主要应用场景包括:
截取图像中的特定感兴趣区域;
实现图像融合,例如构建具有透明效果的叠加层。
1. 效果展示
原始输入图像如下(示例人物为老九门中的颖宝与佛爷):

矩形掩码处理效果如下:通过应用矩形掩码,仅提取包含人物的区域,忽略背景及其他无关部分。

圆形掩码处理效果如下:左侧显示圆形掩模,右侧展示掩模应用后的结果。实际上,可以使用任意形状的掩码图像(如矩形、圆形、线条、多边形等)从原图中提取指定区域。

2. 源代码实现
# 分别使用矩形和圆形遮罩从图像中提取身体和脸部。
# USAGE
# python opencv_masking.py
import argparse
import cv2
# 导入必要的包
import numpy as np
# 构建命令行参数及解析
# --image 输入图像路径
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", type=str, default="yc.jpg",
help="path to the input image")
args = vars(ap.parse_args())
# 加载原始输入图像,并展示
image = cv2.imread(args["image"])
cv2.imshow("Original", image)
# 掩码和原始图像具有相同的大小,但是只有俩种像素值:0(背景忽略)、255(前景保留)
mask = np.zeros(image.shape[:2], dtype="uint8")
cv2.rectangle(mask, (30, 90), (280, 440), 255, -1)
cv2.imshow("Rectangular Mask", mask)
# 应用掩码图像
masked = cv2.bitwise_and(image, image, mask=mask)
cv2.imshow("Rectangular Mask Applied to Image", masked)
cv2.waitKey(0)
# 构造一个圆形掩码(半径为140px,并应用位运算)
mask = np.zeros(image.shape[:2], dtype="uint8")
cv2.circle(mask, (155, 200), 140, 255, -1)
masked = cv2.bitwise_and(image, image, mask=mask)
# 展示输出图像
cv2.imshow("Circular Mask", mask)
cv2.imshow("Circular Mask Applied to Image", masked)
cv2.waitKey(0)
参考资源
https://www.pyimagesearch.com/2021/01/19/image-masking-with-opencv/
至此,关于OpenCV制作图像掩码的详细注释教程已结束。如需了解更多OpenCV图像Mask相关内容,请查阅本站往期文章或继续浏览后续文章。感谢支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













