У меня есть откалиброванная камера (собственная матрица и коэффициенты искажения), и я хочу знать положение камеры, зная некоторые трехмерные точки и соответствующие им точки на изображении (2d точки).
Я знаю, что cv::solvePnP
может мне помочь, и после прочтения this и < a href = "qaru tvec
- вращение и перемещение объекта в системе координат камеры.
Поэтому мне нужно узнать вращение / перемещение камеры в мировой системе координат.
Из приведенных выше ссылок кажется, что код на python прост:
found,rvec,tvec = cv2.solvePnP(object_3d_points, object_2d_points, camera_matrix, dist_coefs)
rotM = cv2.Rodrigues(rvec)[0]
cameraPosition = -np.matrix(rotM).T * np.matrix(tvec)
Я не знаю, что такое python / numpy (я использую C ++), но для меня это не имеет большого смысла:
- rvec, tvec выходные данные от решенияPnP - это матрица 3x1, 3-элементные векторы
- cv2.Rodrigues (rvec) - это матрица 3x3
- cv2.Rodrigues (rvec) [0] - это матрица 3x1, 3-элементные векторы
- cameraPosition - это матрица умножения 3x1 * 1x3, которая является матрицей .. 3x3. как я могу использовать это в opengl с простыми вызовами
glTranslatef
иglRotate
?