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. 掩膜尺寸 / 通道数必须与原图一致,否则会触发维度不匹配报错。
相关推荐
Amazing_Cacao28 分钟前
CFCA精品可可产区风土体系(亚洲):彻底拒绝应试背诵,将感官复核作为检验真实物理差异的唯一铁律
学习
谙弆悕博士4 小时前
信息系统项目管理师教程(第4版)笔记——第 2 章 信息技术发展
笔记·职场和发展·软考高级·软考·高项·项目经理
wp123_16 小时前
【硬件选型笔记】TONEVEE MVL4020-1R2M 与Coilcraft XAL4020-122MEC 大电流功率电感参数深度解析
笔记
aaaameliaaa6 小时前
指针之总结
c语言·笔记·算法
caimouse7 小时前
protoc-gen-c 支持 proto3 `optional` 关键字修改记录
c语言·学习
撩得Android一次心动7 小时前
Linux编程笔记3【个人用】
linux·笔记
憧憬成为java架构高手的小白7 小时前
黑马八股--中间件学习之MQ(RabbitMQ)
学习·中间件
撩得Android一次心动8 小时前
Linux编程笔记4【个人用】
linux·笔记·学习
user-猴子9 小时前
让网页“活”过来 —— 用AI打造会自主学习的动态知识图谱
人工智能·学习·知识图谱
网络工程小王9 小时前
【HCIE-AI】10.pytorch模型迁移分析
人工智能·学习·华为·llama