OpenCV mask掩膜

今天在做portrait-matting算法demo时,想着换张背景图试试看,直接操作像素内存buffer当然没有问题(以前写过太多直接改像素值的操作,也没有什么技术含量,重复造轮子,写的想吐了),于是,试着调用OpenCV库函数完成功能,减少工作量。
其实,换背景的实质就是图层mix,可以用到OpenCV mask掩膜,如果mask是非二值化的,用矩阵运算比较合适,可以确保过渡自然。下面说下如何使用mask掩膜。

作为掩膜mask的数据类型必须是CV_8U。

通常用法(mask掩膜)
Mat src=imread("example.jpg");
Rect t_rect(100,100,200,200
### Python OpenCV 中的掩膜使用方法 在图像处理过程中,掩膜Mask)是一种非常有用的工具。它允许对特定区域应用操作而忽略其他部分。下面将详细介绍如何创建和使用掩膜。 #### 创建简单的掩膜并执行加法运算 为了展示掩膜的工作原理,可以先定义两个简单的小型灰度图像 `img1` 和 `img2` ,以及一个同样大小但大部分像素值为零的掩膜矩阵 `mask` 。只有当掩膜对应位置上的元素不为零时,才会对该处的目标图与源图做相应的算术逻辑运算[^3]。 ```python import cv2 import numpy as np # 定义两张4x4的单通道图像 img1 = np.ones((4, 4), dtype=np.uint8) * 3 img2 = np.ones((4, 4), dtype=np.uint8) * 5 # 初始化掩膜,默认全黑即所有地方都不受影响 mask = np.zeros((4, 4), dtype=np.uint8) # 设置掩膜右下角2x2区域内有效(白色) mask[2:4, 2:4] = 1 print("Image 1:\n", img1) print("\nImage 2:\n", img2) print("\nMask:\n", mask) # 应用掩膜后的相加结果存储到新变量中 result = cv2.add(img1, img2, mask=mask) print("\nResult after applying mask and addition operation:") print(result) ``` 这段代码会打印出原始两幅图像的内容、所使用的掩膜形状及其数值分布情况;最后还会显示经过掩膜筛选之后再进行逐点相加的结果。可以看到,在未被遮挡的地方保持不变,而在有掩膜覆盖的位置则进行了正常的累加计算。 #### 更复杂的例子:基于颜色范围构建掩膜 除了上述基本示例外,还可以利用色彩空间转换函数如 `cv2.cvtColor()` 来获取 HSV 或 LAB 等不同模式下的表示形式,并据此设定阈值条件从而得到更精确的颜色选取效果。例如: ```python import cv2 import numpy as np # 加载彩色图片作为输入样本 image_bgr = cv2.imread('example.jpg') # 转换成HSV格式方便后续处理 hsv_image = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2HSV) # 设定目标物体颜色区间上下限(HSV) lower_bound = (30, 150, 50) upper_bound = (70, 255, 255) # 构建二值化掩膜 mask_color_based = cv2.inRange(hsv_image, lower_bound, upper_bound) # 将原图与生成好的掩膜相结合获得最终输出 output_image = cv2.bitwise_and(image_bgr, image_bgr, mask=mask_color_based) # 展现各个阶段成果对比 cv2.imshow('Original Image', image_bgr) cv2.imshow('Color Mask', mask_color_based) cv2.imshow('Filtered Result', output_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 此段程序展示了怎样依据指定色调范围建立合适的掩膜来突出感兴趣的对象特征,同时抑制背景干扰项的影响。这有助于提高识别精度或简化进一步分析任务前的数据预处理工作量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值