Ich versuche, opencv mit Python zu verwenden. Ich schrieb einen Deskriptor (SIFT, SURF oder ORB) passender Code in C ++ Version von opencv 2.4. Ich möchte diesen Code mit Python in opencv konvertieren. Ich habe einige Dokumente darüber gefunden, wie opencv-Funktionen in C ++ verwendet werden, aber viele der opencv-Funktionen in Python konnten ich nicht finden, wie man sie benutzt. Hier ist mein Python-Code, und mein aktuelles Problem ist, dass ich nicht weiß, wie man "drawMatches" von opencv c ++ in Python verwendet. Ich habe cv2.DRAW_MATCHES_FLAGS_DEFAULT gefunden, aber ich weiß nicht, wie ich es benutzen soll. Hier ist mein Python-Code der Übereinstimmung mit ORB-Deskriptoren:
%Vor%Fehlermeldung der Zeile "img_matches = cv2.DRAW_MATCHES_FLAGS_DEFAULT (im2, keypoints2, im4, keypoints4, raw_matches)"
%Vor%Ich habe viel Zeit mit der Suche nach Dokumentation und Beispielen für die Verwendung von opencv-Funktionen mit Python verbracht. Ich bin jedoch sehr frustriert, da es sehr wenig Informationen über die Verwendung von opencv-Funktionen in Python gibt. Es wird sehr hilfreich sein, wenn mir jemand beibringen kann, wo ich die Dokumentation finde, wie man jede Funktion des opencv-Moduls in Python benutzt. Ich schätze Ihre Zeit und Hilfe.
Ich habe auch selbst etwas geschrieben, das nur die OpenCV-Python-Schnittstelle benutzt und ich habe scipy
nicht benutzt. drawMatches
ist Teil von OpenCV 3.0.0 und gehört nicht zu OpenCV 2, was ich gerade verwende. Auch wenn ich zu spät zur Party komme, hier ist meine eigene Implementierung, die drawMatches
nach besten Kräften nachahmt.
Ich habe meine eigenen Bilder zur Verfügung gestellt, wo einer von einem Kameramann ist, und der andere ist das gleiche Bild, aber um 55 Grad gegen den Uhrzeigersinn gedreht.
Die grundlegende Prämisse von dem, was ich geschrieben habe, ist, dass ich ein RGB-Ausgabebild zuteile, wobei die Anzahl der Zeilen das Maximum der zwei Bilder ist, um beide Bilder in das Ausgabebild zu bringen und die Spalten sind einfach die Summe von beide Spalten zusammen. Ich platziere jedes Bild an den entsprechenden Stellen und führe dann eine Schleife mit allen übereinstimmenden Schlüsselpunkten durch. Ich extrahiere, welche Schlüsselpunkte zwischen den beiden Bildern übereinstimmen und extrahiere dann ihre (x,y)
-Koordinaten. Ich zeichne dann Kreise an jedem der erkannten Stellen und zeichne dann eine Linie, die diese Kreise verbindet.
Bedenken Sie, dass der erkannte Schlüsselpunkt im zweiten Bild in Bezug auf sein eigenes Koordinatensystem ist. Wenn Sie dies in das endgültige Ausgabebild einfügen möchten, müssen Sie die Spaltenkoordinate um die Anzahl der Spalten aus dem ersten Bild versetzen, so dass die Spaltenkoordinate in Bezug auf das Koordinatensystem des Ausgabebilds ist .
Ohne weitere Umschweife:
%Vor%Um zu zeigen, dass das funktioniert, hier sind die zwei Bilder, die ich verwendet habe:
Ich benutzte OpenCVs ORB-Detektor, um die Schlüsselpunkte zu erkennen, und benutzte die normalisierte Hamming-Distanz als Abstandsmaß für die Ähnlichkeit, da dies ein binärer Deskriptor ist. Als solche:
%Vor%Das ist das Bild, das ich bekomme:
Tags und Links python opencv image-processing descriptor