Pixelkoordinaten zu 3D-Linie (opencv)
-
29-09-2019 - |
Frage
Ich habe angezeigt ein Bild auf dem Bildschirm, die über cvInitUndistortMap & cvRemap unverfälschte (mit done Kamerakalibrierung), und dem Benutzer klickt auf einem Feature im Bild. So ich die (u, v) Pixelkoordinaten des Merkmals, und ich habe auch die intrinsische Matrix und die Verzerrungsmatrix ist.
Was ich suche ist die Gleichung der 3D-Linie in der Kamera / Realweltkoordinaten, auf dem die Funktion muss der Benutzer liegen geklickt. Ich habe bereits den senkrechten Abstand zwischen der Bildebene der Kamera, und der Funktion, so dass ich mit der vorgenannten Gleichung kombinieren, um mir die (X, Y, Z) Koordinate des Merkmals im Raum.
Sounds leicht (inverse intrinsische Matrix oder so etwas?), Aber ich kann nicht Schritt-für-Schritt-Anweisungen überall finden. C ++ oder C # -Code bevorzugt.
Lösung
Das ist ein bisschen alte Frage, aber immer noch für jemanden nützlich könnte. Alle Linien gehen durch den Punkt (0,0,0), so:
line.x0 = 0; line.y0 = 0; line.z0 = 0;
Richtungsvektor ist wie folgt: line.A = (u / fx) - (cx / fx); line.B = (v / fy) - (cy / fy); line.C = 1;
cx, cy, fx, fy sind Parameter von Kamera-Matrix. Die Gleichungen werden in "Learning OpenCV" Buch erklärt.