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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在python openCV中计算六边形的内角相关的知识,希望对你有一定的参考价值。

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

hexagon

答案

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

另一答案

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

请参阅this查找角度。

以上是关于如何在python openCV中计算六边形的内角的主要内容,如果未能解决你的问题,请参考以下文章

python如何将不规则区域提取为多边形

多边形的角

在arcgis中如何生成一个凹多边形或面域的形心?

一个多边形给出各点坐标,用c语言求各内角角度

OpenCV 和 Python - 如何使用卡尔曼滤波器从 OpenCV 检测到的不规则多边形中过滤噪声?

计算几何凸多边形判断方法(未完)