我正在尝试使用 opencv python 找出对象的旋转角度。为此,我已经检测到目标,然后我能够找出旋转向量,并将其转换为旋转矩阵,并从该矩阵计算欧拉角。但是当我在视频中旋转对象时,所有三个角度(x、y、z)都会发生变化,当我在平面上移动目标时也会发生变化,即使它显示出角度的变化。请建议我一些方法来获得准确的结果。
这是目标的图像:
while True:
ret, img = cap.read()
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, corners=cv2.findCirclesGrid(gray,(5,5),None)
if ret== True:
corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria)
# Find the rotation and translation vectors.
_,_, rvecs, tvecs= cv2.solvePnPRansac(objp, corners2, mtx, dist)
dst,_ = cv2.Rodrigues(rvecs)
r = dst
x = math.atan2(r[2][1],r[2][2])
y = math.atan2(-r[2][0],math.sqrt((r[0][0])*r[0][0])+(r[1][0]*r[1][0]))
z= math.atan2(r[1][0],r[0][0])
print("x = ",math.degrees(x))
print("y = "math.degrees(y))
print("z = "math.degrees(z))
所需输出:x = 5,y = 0,z = 0
电流输出:x = 6.1,y = 4.7,z = -2.0