如何在python openCV中计算六边形的内角
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在python openCV中计算六边形的内角相关的知识,希望对你有一定的参考价值。
答案
parthagar建议的cv2.CHAIN_APPROX_SIMPLE
确实非常有用,但它通过删除所有直线上的“不必要”点来起作用。如果线条不是完全笔直的,因为它们似乎不在这张图片中,它将无法工作。所以虽然你最终会得到更少的分数,这很好,但几乎肯定不会是你想要的6分。
要获得恰好6个点的近似值,您需要做一些更多的自定义工作。 OpenCV提供可用于此的cv2.approxPolyDP
(Tutorial 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链接中可以找到在两点之间找到角度的方法。祝好运!
另一答案
您必须使用findContours来查找轮廓。您可以将cv2.CHAIN_APPROX_SIMPLE
作为第三个参数传递给cv2.findContours()
,它应该返回六角形的6个点。然后,您可以使用这6个点通过使用numpy函数找到它们之间的角度。
请参阅this查找角度。
以上是关于如何在python openCV中计算六边形的内角的主要内容,如果未能解决你的问题,请参考以下文章