Posición de la cámara en coordenada mundial desde cv :: solvePnP

Tengo una cámara calibrada (matriz intrínseca y coeficientes de distorsión) y quiero saber la posición de la cámara sabiendo algunos puntos 3d y sus puntos correspondientes en la imagen (puntos 2d).

Yo sé esocv::solvePnP Podría ayudarme, y después de leer.esta yesta Entiendo que las salidas de solvePnPrvec ytvec Son la rotación y traslación del objeto en el sistema de coordenadas de la cámara.

Así que necesito averiguar la rotación / traducción de la cámara en el sistema de coordenadas del mundo.

De los enlaces de arriba, parece que el código es sencillo, en 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)

No sé cosas de python / numpy (estoy usando C ++) pero esto no tiene mucho sentido para mí:

rvec, la salida de tvec de solvePnP es una matriz de 3x1, vectores de 3 elementoscv2.Rodrigues (rvec) es una matriz de 3x3cv2.Rodrigues (rvec) [0] es una matriz de 3x1, vectores de 3 elementoscameraPosition es una multiplicación de matrices de 3x1 * 1x3 que es una matriz de .. 3x3. ¿Cómo puedo usar esto en OpenGL con simpleglTranslatef yglRotate llamadas?

Respuestas a la pregunta(2)

Su respuesta a la pregunta