Python OpenCV solvePnP конвертировать в углы Эйлера

Посмотрите на свой логарифм. Он скажет, почему реальные объявления не отображаются.

Вероятно, потому, что в вашем местоположении сейчас нет доступных для вашего устройства.

1
задан fightstarr20 3 March 2019 в 15:29
поделиться

1 ответ

rvecs - это представление угла поворота оси, для которого обычно требуется 4 числа, [v, theta], но v должно быть единичным вектором, и, следовательно, его длина кодируется как тета, уменьшая требуемые числа до 3. [111 ]

для кода, это должно быть что-то вроде этого.

def pnp(objectPoints,imgPoints,w,h,f):
    cameraMatrix = np.array([[f,0,w/2.0],
                     [0,f,h/2.0],
                    [0,0,1]])
    distCoeffs = np.zeros((5,1))
    revtval,rvecs, tvecs  =cv2.solvePnP(objectPoints[:,np.newaxis,:], imgPoints[:,np.newaxis,:], cameraMatrix, distCoeffs)#,False,flags=cv2.SOLVEPNP_EPNP)
    return rvecs,tvecs


def rot_params_rv(rvecs):
    from math import pi,atan2,asin
    R = cv2.Rodrigues(rvecs)[0]
    roll = 180*atan2(-R[2][1], R[2][2])/pi
    pitch = 180*asin(R[2][0])/pi
    yaw = 180*atan2(-R[1][0], R[0][0])/pi
    rot_params= [roll,pitch,yaw]
    return rot_params
0
ответ дан Zaw Lin 3 March 2019 в 15:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: