这是示例图像:
我使用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