OpenCV填充等高线中的孔

2024-09-30 20:34:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做的基本上和侵蚀/扩张是一样的,但是我没有图像,而是有轮廓。这样的话,我试图填补孔状凹痕的轮廓(见下图-用红色绘制的轮廓;编辑:我把它们画满以显示外面和里面的东西)

holes in contours

我知道approxPolyDP,我已经在使用它了,但是如果我给它一个更高的值,其他地方的细节就会丢失

因此,我想知道是否有类似于侵蚀/扩张的功能,或者我是否必须从轮廓生成一个图像,然后我可以使用它来做完全相同的事情或类似的事情

编辑:我现在拥有的是:

  • 在二值图像中检测轮廓:contours = cv2.findContours(im, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_TC89_L1)[0]
  • 大致轮廓:approxConts = [cv2.approxPolyDP(contour, 0.002*cv2.arcLength(contour, True), True) for cont in contours](对于我的用例来说,0.002是一个很好的值,一般来说,更高的值会导致细节的丢失)

我现在想做的是cv2.erode(cv2.dilate(contour, someKernel), someKernel),这显然不起作用,因为轮廓不是图像。因此,我需要一些类似的功能,扩大轮廓,删除线交叉,而不是只使用交点,并缩小轮廓再次。我想要的是这样的:

filled holes


Tags: 图像功能true编辑绘制事情cv2细节