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

时间:2018-09-23 16:10:17

标签: python python-2.7 opencv shape-recognition

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

hexagon

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

请参阅this来查找角度。