Wie kann ich ein 2D-Punkt-Set anwenden, wenn ich das Gegenteil von undistortPoints anwende?
Ich habe die Kamera intrinsics und distCoeffs und möchte (zum Beispiel) ein Quadrat erstellen und es verzerren, als ob die Kamera es durch die Linse betrachtet hätte.
Ich habe hier einen 'verzerrten' Patch gefunden: Ссылка , aber es scheint, das ist nur gut für Bilder, ich möchte an spärlichen Punkten arbeiten.
Danke
Eine einfache Lösung besteht darin, initUndistortRectifyMap
zu verwenden, um eine Karte von unverzerrten Koordinaten zu verzerrten Koordinaten zu erhalten:
Ich bearbeite, um klarzustellen, dass der Code korrekt ist:
Ich zitiere die Dokumentation von initUndistortRectifyMap
:
für jedes Pixel (u, v) im Ziel (korrigiert und korrigiert) Bild berechnet die Funktion die entsprechenden Koordinaten in der Quellbild (also im Originalbild von der Kamera.
map_x (u, v) = x''f_x + c_x
map_y (u, v) = y''f_y + c_y
Diese Frage ist ziemlich alt, aber da ich hier von einer Google-Suche endete, ohne eine saubere Antwort zu sehen, entschied ich mich trotzdem, sie zu beantworten.
Es gibt eine Funktion namens projectPoints das macht genau das. Die C-Version wird intern von OpenCV verwendet, wenn Kameraparameter mit Funktionen wie calibrateCamera und stereoCalibrate
BEARBEITEN: Um 2D-Punkte als Eingabe zu verwenden, können wir alle Z-Koordinaten mit morotspaj 26.12.2013 12:04
undistortPoint ist eine einfache Umkehrversion der Projektpunkte
In meinem Fall würde ich gerne Folgendes machen:
Undistort-Punkte:
%Vor%Dadurch werden die Punkte bis auf die sehr ähnliche Koordinate des Ursprungsbildes ohne Verzerrung entstort. Es ist das Standardverhalten der cv :: undistort () - Funktion.
redistort Punkte:
%Vor%Das Problem besteht darin, zuerst die Punkte auf z = 1 Ebene mit einem linearen Kameramodell zu projizieren. Danach projizieren Sie es mit dem ursprünglichen Kameramodell.
Ich fand diese nützlich, ich hoffe, es funktioniert auch für Sie.
Tags und Links opencv points distortion