我在python中使用opencv 4.0.0
。
当将cv2.cartToPolar
的值设置为False并将x
的值设置为False并将y
的值设置为False时,调用函数angleInDegrees
时,我得到了错误的答案。应该是pi
,而不是3.14159274
,它比pi
大。
x = np.asarray([[-12]], dtype = "float64")
y = np.asarray([[0]], dtype = "float64")
mag, angle = cv2.cartToPolar(x, y, angleInDegrees=True)
print('mag', mag)
print('angle', angle)
>>> mag [[12.]]
>>> angle [[180.]]
x = np.asarray([[-12]], dtype = "float64")
y = np.asarray([[0]], dtype = "float64")
mag, angle = cv2.cartToPolar(x, y, angleInDegrees=False)
print('mag', mag)
print('angle', angle)
>>> mag [[12.]]
>>> angle [[3.14159274]]
我期望
3.14159265
的输出。 最佳答案
这是一个有趣的观察。这必须与@Sushi指出的浮点运算的精度有关。根据文档here,cv2.cartToPolar
函数的输出由
x = np.asarray([[-12]], dtype = "float32")
y = np.asarray([[0]], dtype = "float32")
print(cv2.cartToPolar(x, y, angleInDegrees=False)[1])
print(np.radians(np.arctan2(y, x) * 180 / np.pi))
x = np.asarray([[-12]], dtype = "float64")
y = np.asarray([[0]], dtype = "float64")
print(cv2.cartToPolar(x, y, angleInDegrees=False)[1])
print(np.radians(np.arctan2(y, x) * 180 / np.pi))
输出:
[[3.1415927]]
[[3.1415927]]
[[3.14159274]]
[[3.14159265]] # check this result