使用 OpenCV 从轮廓中获取掩码

Posted

技术标签:

【中文标题】使用 OpenCV 从轮廓中获取掩码【英文标题】:get mask from contour with OpenCV 【发布时间】:2015-11-30 20:00:18 【问题描述】:

感谢 cv.findContours,我想从轮廓中获取图像蒙版(它仅存在 1 个轮廓)。

但是,虽然我的轮廓变量不为空,但我无法使用 cv.drawContours 检索图像蒙版,我的目标图像始终为空。

这是我的代码:

img = mosaicImage[:,:,0].astype('uint8')
contours, _ = cv.findContours(img.copy(), cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
mask = np.zeros(img.shape, np.uint8)
cv.drawContours(mask, contours, -1, (0,255,0),1)

希望你能帮上忙!

谢谢

【问题讨论】:

掩码为单通道。您尝试设置通道 2... 尝试 cv.drawContours(mask, contours, -1, (255),1) 如果要创建蒙版,是否要填充轮廓?您可以通过将 drawContours 的最后一个参数从 1 更改为 -1 来做到这一点 【参考方案1】:

您正在为蒙版设置颜色 (0,255,0),但蒙版是单通道,因此您使用颜色 0 绘制轮廓。

试试

 cv.drawContours(mask, contours, -1, (255),1)

 cv.drawContours(mask, contours, -1, (255,255,255),1)

【讨论】:

以上是关于使用 OpenCV 从轮廓中获取掩码的主要内容,如果未能解决你的问题,请参考以下文章

opencv:从图像创建二进制掩码

OpenCV在轮廓边界内获取黑色像素

在 OpenCV 中放大对象轮廓

使用opencv获取(内边缘)轮廓像素

将轮廓(MatplotLib 或 OpenCV)转换为与原始大小相同的图像

使用 OpenCV (Python) 改进轮廓检测