Путаница с вектором/матрицей вращения

#python #opencv #matrix #opencv-solvepnp

Вопрос:

Я использую solvePnP() , чтобы получить матрицу вращения фигуры в 3D, которая, согласно некоторым источникам, представляет собой матрицу 3×3. В моем случае я получаю вектор (3×1). Я делаю что-то не так или формат зависит от матрицы моей камеры, коэффициентов искажения и так далее? Я использую эту строку:

 (success, rotation_vector, translation_vector) = cv2.solvePnP(model_points, image_points,camera_matrix, dist,flags=cv2.SOLVEPNP_ITERATIVE)
 

где я использую 5 точек изображения и точек объекта в форме ((x,y) для 2D-точек и (x,y,z) для 3D-точек, z=0, так как поверхность плоская), матрица камеры

 camera_matrix = np.array([[971.11273473, 0, 326.55605087], [0, 970.7328241, 234.15076249], [0, 0, 1]])
 

и dist_coeffs являются

 dist = np.array([[-2.80642551e-01, 4.07127806e 00, -1.23761546e-03, -1.38615834e-03, -3.75389206e 01]])
 

которые были определены после выполнения калибровки камеры.
Вектор rotation_vector возвращается следующим образом:

Вектор Вращения:

  [[ 0.17791832]

 [ 0.04932656]

 [-0.05101292]]
 

и после преобразования с Родригесом() Я получаю

 [[ 0.99748998  0.05507619  0.04450127]

 [-0.04632689  0.98292368 -0.17808663]

 [-0.05354968  0.17557803  0.98300803]]
 

Моя проблема в том, что определение матрицы вращения является произведением матриц вращения вокруг каждой оси, поэтому по определению это должна быть матрица 3×3. Может ли кто-нибудь, возможно, объяснить это или сказать мне, что я делаю не так?

Комментарии:

1. это rvec представление поворота под углом к оси . длина вектора кодирует угол (3,1415… 180 градусов). Rodrigues() преобразует представление матрицы в представление угла оси. все это объясняется в официальной документации. пожалуйста, найдите его и используйте.