opencv补全边缘_为什么OpenCV中绘制的轮廓不能填充图像边缘的轮廓?

编辑:我绕过了这个问题,在图像中添加了一个2位帧,然后使用我的代码,最后剪切图像以删除多余的帧。这是一个丑陋的解决方案,但它的工作!

我遇到了一个问题,我不确定这是一个错误还是我缺乏经验。我会尽量把它总结清楚:我得到了一个二值图像,其中包含我要分析的彩色图像的轮廓(白色像素是我的算法检测到的轮廓的周长,其余为黑色)。图像相当复杂,因为我要检测的对象完全填充了图像(没有“背景”)。

我用findcontours来处理这个图像:contours, hierarchy = cv2.findContours(image,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_NONE)

然后“for”循环检测面积小于“X”像素和hierarchy[0][x][3] >= 0的轮廓(让我们称新数组为“courtos”

我在新图像中绘制“轮廓2”:cv2.drawContours(image=image2, contours=contours_2, contourIdx=-1, color=(255,255,255), thickness=-1)

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

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

在绘制轮廓之前,我可以使用cv2.converxhull绘制那些“边缘”轮廓,但我只需要在边缘使用它(因为它会使轮廓变形,我希望尽可能避免这种情况)。问题是。。。我没有办法检测哪些轮廓在图像的边缘,哪些不在,并且可以与绘制轮廓一起工作。

所以我想问一下为什么drawContour的行为是那样的,如果有什么方法可以让它填充边缘的轮廓。或者,另一个解决方案是找到如何检测图像边界中的轮廓(以便在需要时应用converxhull)。

你可能感兴趣的:(opencv补全边缘)