种子填充算法java_为什么OpenCV中的drawcontours不能填充图像边缘的轮廓?

EDIT: 我通过向图像添加2位帧,然后使用我的代码,最后裁剪图像以删除额外的帧来绕过问题 . 这是一个丑陋的解决方案,但它的工作原理!

我遇到了一个问题,我不确定这是一个错误还是我缺乏经验 . 我会尽可能清楚地总结一下:

我得到一个二进制图像,其中包含我想要分析的彩色图像的轮廓(白色像素是我的算法检测到的轮廓的周长,其余为黑色) . 图像非常复杂,因为我要检测的对象完全填满图像(没有“背景”) .

我对该图像使用了findcontours:

contours, hierarchy = cv2.findContours(image,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_NONE)

然后"for"循环检测面积小于"X"像素的轮廓和 hierarchy[0][x][3] >= 0 (让我们调用新数组"contours_2")

我在新图片中绘制“contours_2”:

cv2.drawContours(image=image2, contours=contours_2, contourIdx=-1, color=(255,255,255), thickness=-1)

问题是drawcontours绘制所有轮廓都很好,但它不会“填充”图像边界中的轮廓(这是在图像边缘有一个边界的轮廓) . 我尝试将图像的边框像素(如框架)设置为True,但它不起作用,因为findcontours会自动将这些像素设置为零(在函数说明中) .

在前一个循环中使用 cv2.contourArea 可以很好地检测这些轮廓并返回正常值,因此无法知道drawcontours何时忽略轮廓以及何时正确填充轮廓 . cv2.isContourConvex 根本不起作用,因为每个轮廓都返回false .

我可以在绘制它们之前使用cv2.convexHull绘制那些“边缘”轮廓,但我只需要在边缘上使用它(因为它会使轮廓变形并且我想尽可能地避免这种情况) . 问题是......我无法检测哪些轮廓位于图像的边缘,哪些轮廓不是,并且可以使用drawcontours工作 .

所以我想问为什么drawContour表现得那样,如果有一些方法可以让它填充边缘的轮廓 . 或者,另一种解决方案是找到如何检测图像边界中的轮廓(因此我可以在需要时应用凸包) .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值