gpt4 book ai didi

python - 检测闭合轮廓

转载 作者:太空狗 更新时间:2023-10-30 01:34:33 25 4
gpt4 key购买 nike

这是示例图片:

screenshot

我使用 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() 函数中搜索可用方法的附加常量,但似乎都返回封闭路径。

那么是否有一些通用的方法来检测找到的轮廓是否闭合?


我在问之前用谷歌搜索并没有得到结果,但我在右侧的类似问题中看到了很好的候选人:How can i know if a contour is open or closed in 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

最佳答案

我自己遇到了这个问题,我找到了解决方法...

经历这个..

for i in contours:
print(cv2.contourArea(i), cv2.arcLength(i,True))

我注意到闭合轮廓(例如圆)的 contourArea 高于 arcLength,而开放轮廓(例如线)的 contourAreaarcLength,所以你可以这样过滤它们......

closed_contours = []
open_contours = []
for i in contours:
if cv2.contourArea(i) > cv2.arcLength(i, True):
closed_contours.append(i)
else:
open_contours.append(i)

我知道这是 3 多年前有人问过的,但对于任何需要想法的人来说,这对我有用!

关于python - 检测闭合轮廓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17479606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com