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. 掩膜尺寸 / 通道数必须与原图一致,否则会触发维度不匹配报错。
相关推荐
好奇龙猫10 分钟前
【人工智能学习-AI入试相关题目练习-第十六次】
人工智能·学习
舟舟亢亢15 分钟前
JVM复习笔记——下
java·jvm·笔记
量子-Alex24 分钟前
【大模型课程笔记】斯坦福大学CS336 课程环境配置与讲座生成完整指南
人工智能·笔记
土拨鼠烧电路41 分钟前
笔记04:价值链深度游:追踪一包纸巾的“数字一生”
笔记
BlackWolfSky1 小时前
鸿蒙中级课程笔记12—应用质量建议与测试指南
笔记·华为·harmonyos
啊我不会诶1 小时前
Codeforces Round 1071 (Div. 3) vp补题
开发语言·学习·算法
格林威1 小时前
Baumer相机金属弹簧圈数自动计数:用于来料快速检验的 6 个核心算法,附 OpenCV+Halcon 实战代码!
人工智能·数码相机·opencv·算法·计算机视觉·视觉检测·堡盟相机
星火开发设计1 小时前
命名空间 namespace:解决命名冲突的利器
c语言·开发语言·c++·学习·算法·知识
卖芒果的潇洒农民1 小时前
20260201 GPT VPC中的CIDR Block 概念
笔记·gpt
困死,根本不会1 小时前
OpenCV摄像头实时处理:从单特征到联合识别(形状识别 + 颜色识别 + 形状颜色联合识别)
人工智能·opencv·计算机视觉