Opencv 学习笔记:图像掩膜操作(精准提取指定区域像素)

图像掩膜(Mask)是提取图像局部区域的核心技巧,通过创建与原图匹配的掩膜模板,结合按位与操作可精准保留目标区域、屏蔽其他区域。本文通过极简代码,演示多边形掩膜的创建与图像掩膜提取的完整流程。

核心代码实现

python 复制代码
import cv2 as cv
import numpy as np

# 1. 以灰度模式读取原图
src = cv.imread(".\image\1.bmp", 0)
if src is None:
    print('could not load image')
    exit()

# 2. 定义多边形掩膜顶点坐标(矩形区域示例)
site = np.array([[400, 200], [300, 200], [300, 100], [400, 100]], dtype=np.int32)
# 重塑坐标格式(适配polylines/fillPoly要求)
site = site.reshape((-1, 1, 2))

# 3. 创建与原图同尺寸的纯黑掩膜画布
outimage = np.zeros((src.shape[0], src.shape[1]), np.uint8)
# 绘制多边形轮廓(可选,仅可视化)
cv.polylines(outimage, [site], 1, 255)
# 填充多边形区域为白色(255),形成掩膜模板
cv.fillPoly(outimage, [site], 255)

# 4. 按位与操作:仅保留掩膜白色区域的原图像素
masked = cv.bitwise_and(src, outimage, mask=outimage)

# 5. 显示结果
cv.imshow("outimage", masked)
cv.waitKey(0)
cv.destroyAllWindows()

关键知识点解析

  1. 掩膜创建核心
    • 先通过np.zeros创建纯黑画布,尺寸与原图一致;
    • cv.fillPoly将目标多边形区域填充为白色(255),形成 "白区保留、黑区屏蔽" 的掩膜模板。
  2. 坐标重塑规则 :多边形顶点数组需通过reshape((-1, 1, 2))转换维度,否则fillPoly无法识别坐标格式。
  3. 按位与操作原理cv.bitwise_and(src, outimage, mask=outimage) 仅当掩膜像素为 255(白色)时,保留原图对应位置像素;掩膜为 0(黑色)时,结果像素置 0。
  4. 参数说明
    • cv.fillPoly第三个参数1表示闭合多边形;
    • 掩膜需与原图通道数一致(灰度图单通道,彩色图 3 通道)。

实用扩展技巧

  • 提取彩色图区域:将掩膜改为 3 通道(np.zeros((h,w,3), np.uint8)),其余逻辑不变;
  • 圆形掩膜:用cv.circle替换fillPoly,填充圆形区域为白色;
  • 多区域掩膜:定义多个顶点数组,循环调用fillPoly填充多个白色区域。

总结

  1. 图像掩膜操作核心是 "创建掩膜模板 + 按位与提取",掩膜白色区域为保留区、黑色为屏蔽区;
  2. 多边形掩膜需先重塑坐标维度,确保与 OpenCV 绘图 API 兼容;
  3. 掩膜尺寸 / 通道数必须与原图一致,否则会触发维度不匹配报错。
相关推荐
执笔论英雄2 小时前
【大模型学习cuda】入们第一个例子-向量和
学习
wdfk_prog2 小时前
[Linux]学习笔记系列 -- [drivers][input]input
linux·笔记·学习
ouliten2 小时前
cuda编程笔记(36)-- 应用Tensor Core加速矩阵乘法
笔记·cuda
智驱力人工智能3 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
孞㐑¥3 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
Gary Studio4 小时前
rk芯片驱动编写
linux·学习
mango_mangojuice4 小时前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习
sali-tec4 小时前
C# 基于OpenCv的视觉工作流-章22-Harris角点
图像处理·人工智能·opencv·算法·计算机视觉
工程师老罗5 小时前
YOLOv1 核心知识点笔记
笔记·yolo
lingggggaaaa5 小时前
安全工具篇&动态绕过&DumpLsass凭据&Certutil下载&变异替换&打乱源头特征
学习·安全·web安全·免杀对抗