答案 0 :(得分:1)
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链接中找到。祝你好运!
答案 1 :(得分:0)
您必须已使用findContours查找轮廓。您可以将cv2.CHAIN_APPROX_SIMPLE
作为第三个参数传递给cv2.findContours()
,这将返回六边形的6个点。然后,您可以使用numpy函数使用这6个点来查找它们之间的角度。
请参阅this来查找角度。