Posição da câmera na coordenada mundial de cv :: solvePnP
Eu tenho uma câmera calibrada (matriz intrínseca e coeficientes de distorção) e eu quero saber a posição da câmera conhecendo alguns pontos 3d e seus pontos correspondentes na imagem (2d pontos).
Eu sei dissocv::solvePnP
poderia me ajudar, e depois de leristo eisto Eu entendo que eu as saídas de solvePnPrvec
etvec
são a rotação e a translação do objeto no sistema de coordenadas da câmera.
Então eu preciso descobrir a rotação / tradução da câmera no sistema de coordenadas mundial.
Nos links acima, parece que o código é direto, em 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)
Eu não sei python / numpy stuffs (estou usando C + +), mas isso não faz muito sentido para mim:
rvec, tvec saída de solvePnP são matriz 3x1, 3 elementos vetorescv2.Rodrigues (rvec) é uma matriz 3x3cv2.Rodrigues (rvec) [0] é uma matriz 3x1, 3 elementos vetoriaiscameraPosition é uma multiplicação de matriz 3x1 * 1x3 que é uma matriz 3x3. Como posso usar isso em OpenGL com simplesglTranslatef
eglRotate
chama?