Kameraposition in Weltkoordinate von cv :: solvePnP

Ich habe eine kalibrierte Kamera (intrinsische Matrix und Verzerrungskoeffizienten) und möchte die Kameraposition kennen, indem ich einige 3D-Punkte und die entsprechenden Punkte im Bild (2D-Punkte) kenne.

ich weiß dascv::solvePnP könnte mir helfen, und nach dem lesendiese unddiese Ich verstehe, dass ich die Ausgaben von solvePnPrvec undtvec sind die Drehung und Verschiebung des Objekts im Kamerakoordinatensystem.

Ich muss also die Kameradrehung / -verschiebung im Weltkoordinatensystem herausfinden.

Aus den obigen Links geht hervor, dass der Code in Python einfach ist:

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)

Ich kenne keine Python / Numpy-Sachen (ich benutze C ++), aber das ergibt für mich keinen Sinn:

rvec, tvec-Ausgangssignale von solvePnP sind 3x1-Matrix- und 3-Element-Vektorencv2.Rodrigues (rvec) ist eine 3x3 Matrixcv2.Rodrigues (rvec) [0] ist eine 3x1-Matrix mit 3 ElementvektorencameraPosition ist eine 3x1 * 1x3-Matrixmultiplikation, die eine 3x3-Matrix ist. wie kann ich das in opengl mit simple nutzenglTranslatef undglRotate Anrufe?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage