如何在python openCV中计算六边形的内角

问题描述 投票:1回答:2

我使用OpenCV在Python中检测到了六边形的形状。我只是想计算它的内角 - 通过使用轮廓技术和近似来检测形状。

hexagon

python python-2.7 opencv shape-recognition
2个回答
1
投票

parthagar建议的cv2.CHAIN_APPROX_SIMPLE确实非常有用,但它通过删除所有直线上的“不必要”点来起作用。如果线条不是完全笔直的,因为它们似乎不在这张图片中,它将无法工作。所以虽然你最终会得到更少的分数,这很好,但几乎肯定不会是你想要的6分。

要获得恰好6个点的近似值,您需要做一些更多的自定义工作。 OpenCV提供可用于此的cv2.approxPolyDPTutorial py contour features - 4. Contour Approximation)。它确实需要找到正确的epsilon值来获得正确数量的点,但这可以通过强制执行来找到:

#cnt = Your contour to be approximated
points_wanted = 6
precision = 10000
for x in range(precision):
    epsilon = (x/precision)*cv2.arcLength(cnt, True)
    approx = cv2.approxPolyDP(cnt, epsilon, True)
    if approx.shape[0] == points_wanted:
        break

结果如下所示。请注意,它不是完美的,它是近似值,但希望它足够接近。在parthagars链接中可以找到在两点之间找到角度的方法。祝好运!

enter image description here


0
投票

您必须使用findContours来查找轮廓。您可以将cv2.CHAIN_APPROX_SIMPLE作为第三个参数传递给cv2.findContours(),它应该返回六角形的6个点。然后,您可以使用这6个点通过使用numpy函数找到它们之间的角度。

请参阅this查找角度。

© www.soinside.com 2019 - 2024. All rights reserved.