当前位置: 代码迷 >> python >> 如何在python openCV中计算六边形的内角
  详细解决方案

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

热度:97   发布时间:2023-06-27 21:56:36.0

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

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

要获得 6 分的近似值,您需要做一些更多的自定义工作。 OpenCV 提供cv2.approxPolyDP ( )可用于此目的。 它确实需要找到正确的 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 链接中可以找到寻找两点之间角度的方法。 祝你好运!

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

请参阅以查找角度。