Ich verwende einen offenen Lebenslauf in IOS. Ich habe bereits die Grenze des Papierblattes in einem Bild erkannt, wie in Bild gezeigt, und jetzt muss ich diese Grenzlinie bei Berührung ziehen, um den Zuschnittsrahmen anzupassen. Wie können wir die Grenzlinie anpassen und wie wir das Bild innerhalb der Grenze zuschneiden können?
Das ist in openCV möglich oder ich verwende openGL dafür?
@moosgummi: Ich rufe deine Methode in der unteren Methode
auf %Vor%Danke allen
Nachdem Sie die Ecken bekommen haben, müssen Sie das Papier entzerren und es zu einem neuen Bild "extrahieren".
Sie sollten Folgendes tun:
cv::getAffineTransform
cv::warpAffine
Ich habe mir selbst eine Hilfsfunktion geschrieben, die ein std::vector
mit vier cv::Point
enthält und sie im Uhrzeigersinn beginnend oben links sortiert. Weitere Informationen zu diesem Thema finden Sie in folgenden Themen:
Eine weitere Sache, die Sie berücksichtigen sollten, ist die Größe des Papiers, das Sie extrahieren möchten. In meinem Beispiel nehme ich an, dass Sie ein DIN-A4-Papier (210x297mm) extrahieren. Fühlen Sie sich frei, paperWidth
und paperHeight
in meinem Code zu bearbeiten.
Die Kombination sieht so aus:
%Vor%Verwendung:
%Vor%Was Sie tun sollten, ist:
Füge die 4 Ecken, die du gefunden hast, und die 4 echten Ecken des Bildes zu cv::getPerspectiveTransform
. Es wird Ihnen eine Matrix der Perspektiventransformation geben, die das Viereck auf das ganze Bild umlenken wird.
Verwenden Sie cv::WarpPerspective
, um das gewünschte Bild zu erstellen.
Die Links führen Sie zur Dokumentation.
EDIT: Sie könnten cv::findHomography
verwenden, um Schritt 1 zu tun. Aber das ist mehr über eine Menge von entsprechenden Punkten und Ausreißern.
EDIT: Hier ist ein Beispiel. Es ist mit der C-Schnittstelle, aber Sie könnten es leicht machen, mit dem C ++
zu arbeiten %Vor% Sie sollten das Array first
durch Endpunkte des gefundenen Vierecks ersetzen.
EDIT: Hier sind einige Beispiele. Ich habe sie nicht sehr gut angesehen.
Tags und Links objective-c iphone opencv ios image-processing