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?