这是示例图片:
我使用OpenCV来检测轮廓:
>>> fc = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
>>> contours = fc[0]
为了检测封闭轮廓,我打算在opencv返回的每个轮廓中检查起始点和结束点,但我注意到无论对象的形状如何,opencv似乎都会勾勒出每个对象,因此我得到了这个结果:
>>> for contour in contours:
>>> print(contour[0,:,:], contour[-1,:,:])
[[246 38]] [[247 38]]
[[92 33]] [[93 33]]
每个找到的轮廓都有一个封闭路径。
我搜索了
findContour()
函数中可用方法的其他常量,但似乎所有返回的都是封闭路径。那么是否有一般的方法来检测找到的轮廓是否封闭?
在提问之前我进行了谷歌搜索,但没有找到结果,但是我在类似问题的右侧看到了一个好的候选人:如何在OpenCV中知道轮廓是开放的还是封闭的?,其中建议使用cv2.isContourConvex(contour)
,但是:
>>> for contour in contours:
>>> print(cv2.isContourConvex(contour))
False
False
又一个更新:contourArea 看起来可能提供答案(至少对于简单轮廓),但我没有在上面的示例图像以外的任何东西上进行测试:
>>> for contour in contours:
>>> print(cv2.contourArea(contour))
0.0
12437.5
convexHull()
的输出来检查凸性?例如contourhulled=cv2.convexHull(contour); cv2.isContourConvex(contourhulled)
。 - Jason