Ich erkenne Markierungen auf Bildern von meinem iPad gefangen. Aus diesem Grund möchte ich Übersetzungen und Rotationen zwischen ihnen berechnen, ich möchte ändern Perspektive auf Bilder dieses Bild ändern, so dass es aussehen würde, als ob ich sie direkt über Markierungen gefangen bin.OpenCV: wrapPerspective für das ganze Bild
Im Moment bin ich mit
points2D.push_back(cv::Point2f(0, 0));
points2D.push_back(cv::Point2f(50, 0));
points2D.push_back(cv::Point2f(50, 50));
points2D.push_back(cv::Point2f(0, 50));
Mat perspectiveMat = cv::getPerspectiveTransform(points2D, imagePoints);
cv::warpPerspective(*_image, *_undistortedImage, M, cv::Size(_image->cols, _image->rows));
Welche meine diese Ergebnisse gibt (Blick auf die rechte untere Ecke zum Ergebnis warpPerspective
):
Wie Wahrscheinlich sehen Sie, dass das Ergebnisbild eine erkannte Markierung in der linken oberen Ecke des Ergebnisbildes enthält. Mein Problem ist, dass ich das gesamte Bild (ohne Zuschneiden) erfassen möchte, damit ich später andere Markierungen auf diesem Bild erkennen kann.
Wie kann ich das tun? Vielleicht sollte ich Dreh-/Übersetzungsvektoren von solvePnP
Funktion verwenden?
EDIT:
Unfortunatelly Ändern Größe von verzogenen Bild nicht viel helfen, weil Bild noch so Ecke links oben übersetzt von Marker ist in oberen linken Ecke des Bildes.
Zum Beispiel, wenn ich habe Größe verdoppelt werden:
cv::warpPerspective(*_image, *_undistortedImage, M, cv::Size(2*_image->cols, 2*_image->rows));
Ich habe diese Bilder empfangen:
Ich weiß, dass Bildausgabe unterschiedliche dimenstions haben kann, ich habe sie mit Verdoppelung versucht (für Ergebnisse bei editierte Frage aussehen), aber es hat nicht gab mir nützliche Ergebnisse. Sie sagen, dass mein Code unvollständig ist - was soll ich hinzufügen? Ich benutze 'getPerspectiveTransform', um Transformationsmatrix zu erhalten, und verwende Koordinaten von Ecken von erkannten Markern dort als 'dst'-Matrix (laut OpenCV-Dokumentation - http://docs.opencv.org/modules/imgproc) /doc/geometric_transformations.html#getperspectivetransform). – Axadiw
Nun, ich denke, Ihre Zielkoordinaten (-6, -6) usw. sind ein bisschen komisch. Das bedeutet, dass Ihr Zielrechteck im resultierenden Bild an diesen Koordinaten liegt. Um sie zu verschieben, verschieben Sie das Zielrechteck einfach in die Mitte des Zielbildes. – littleimp
Danke - Ich habe herausgefunden, dass ich ein falsches points2D-Array gepostet habe (ich habe es gerade in der Frage bearbeitet). Das Verschieben dieser Punkte hat das gesamte Ausgabebild verschoben, aber ich schneide immer noch einige Teile davon. – Axadiw