Vorlagenabgleich mit OpenCV in Python
-
Verwenden Sie die Funktion
matchTemplate()
, um den Vorlagenabgleich mit OpenCV in Python durchzuführen - Fazit
Die Bibliothek opencv
in Python implementiert viele Techniken und Algorithmen. Mit dieser Bibliothek können wir verschiedene Computer Vision- und KI-Aufgaben ausführen.
Eine solche Funktion dieser Bibliothek ist der Vorlagenabgleich.
Lassen Sie uns diese Technik im Detail besprechen. Der Vorlagenabgleich bezieht sich auf die Überprüfung, ob ein kleiner Teil eines Bildes Teil eines anderen Bildes ist oder nicht.
Dieser kleine Teil (auch Schablone genannt) wird horizontal und vertikal über das Bild bewegt, um die wahrscheinlichste Position der Schablone zu finden. Der Vorlagenabgleich mit opencv
hat viele reale Anwendungen, insbesondere die Objekterkennung.
Dieses Tutorial zeigt, wie man einen Template-Matching mit opencv
in Python durchführt.
Verwenden Sie die Funktion matchTemplate()
, um den Vorlagenabgleich mit OpenCV in Python durchzuführen
Die Funktion matchTemplate()
kann verwendet werden, um die Position einer gegebenen Vorlage in einem Bild zu finden. Wir können beide Bilder an diese Funktion übergeben, die die Vorlage in beide Richtungen verschiebt, um die am besten passende Position zu finden.
Die Pixeldichte jeder Position wird berechnet, und diejenige mit der höchsten Dichte (helle Pixel) ist die wahrscheinlichste Übereinstimmung. Das matchTemplate()
verwendet mehrere Methoden und wird mit dem Parameter method
spezifiziert.
Es gibt insgesamt sechs: TM_CCOEFF
, TM_CCOEFF_NORMED
, TM_CCORR
, TM_CCORR_NORMED
, TM_SQDIFF
und TM_SQDIFF_NORMED
.
Beachten Sie, dass TM_CCORR
aufgrund seiner ungenauen Ergebnisse nicht als gute Wahl angesehen wird. Beachten Sie auch, dass wir für die Methoden TM_SQDIFF
und TM_SQDIFF_NORMED
den Mindestwert auswählen.
Dies wird anhand der folgenden Beispiele deutlich.
Nachdem wir diese Funktion nun ausführlich besprochen haben, betrachten wir ein Arbeitsbeispiel. Die Vorlage und das vollständige Bild werden unten angezeigt, gefolgt von Code und Ergebnis.
Bild:
Schablone:
import cv2
i = cv2.imread("deftstack.png")
img = cv2.cvtColor(i, cv2.COLOR_BGR2GRAY)
temp = cv2.imread("temp.png", 0)
width, height = temp.shape[::-1]
result = cv2.matchTemplate(img, temp, cv2.TM_CCOEFF)
val_min, val_max, min_loc, max_loc = cv2.minMaxLoc(result)
t_left = max_loc
b_right = (t_left[0] + width, t_left[1] + height)
cv2.rectangle(i, t_left, b_right, 255, 2)
cv2.imshow("Output", i)
cv2.waitKey(0)
cv2.destroyAllWindows()
Ausgabe:
Lassen Sie uns nun den Code im Detail besprechen. Wir beginnen mit dem Lesen der erforderlichen Bilder.
Wir konvertieren dieses Bild mit der Funktion cvtColor()
in Graustufen, um Bilder in die erforderlichen Farbräume zu konvertieren. Schwarz-Weiß-Bilder liefern das beste Ergebnis.
Wir übergeben die Vorlage und das Bild zusammen mit der Methode TM_CCOEFF
an die Funktion matchTemplate()
.
Dies gibt ein numpy
-Array zurück. Wir benötigen eine Reihe von Werten aus diesem Array, um die Koordinaten zu finden.
Die Funktion minMaxLoc()
findet die minimalen und maximalen Werte eines Arrays und ihre Indizes. Wir verwenden die Position des Maximalwerts, um die besten Übereinstimmungskoordinaten zu berechnen.
Wir verwenden die Funktion rectangle()
, um ein Rechteck über den übereinstimmenden Teil zu zeichnen. Das Bild wird dann mit dem Ergebnis angezeigt.
Die Funktionen waitKey()
und destroyAllWindows()
verhindern das automatische Schließen des Ausgabefensters und warten auf eine Benutzereingabe.
Wie besprochen, können wir die anderen besprochenen Methoden innerhalb der Funktion matchTemplate()
ähnlich verwenden. Der einzige Unterschied betrifft die Methoden TM_SQDIFF
und TM_SQDIFF_NORMED
.
Wir können sie verwenden, indem wir unseren Code leicht anpassen. Siehe folgendes Beispiel.
import cv2
i = cv2.imread("deftstack.png")
img = cv2.cvtColor(i, cv2.COLOR_BGR2GRAY)
temp = cv2.imread("temp.png", 0)
width, height = temp.shape[::-1]
result = cv2.matchTemplate(img, temp, cv2.TM_SQDIFF)
val_min, val_max, min_loc, max_loc = cv2.minMaxLoc(result)
t_left = min_loc
b_right = (t_left[0] + width, t_left[1] + height)
cv2.rectangle(i, t_left, b_right, 255, 2)
cv2.imshow("Output", i)
cv2.waitKey(0)
cv2.destroyAllWindows()
Ausgabe:
Das obige Beispiel zeigt, dass wir den Minimalwertindex verwenden, um die Vorlagenkoordinaten zu berechnen. Der restliche Code bleibt gleich.
Fazit
Dieses Tutorial demonstrierte die Template-Matching-Technik mit opencv
in Python. Wir haben die Grundlagen des Template-Matchings und die Funktion in der opencv
-Bibliothek besprochen, die diese Technik implementiert.
Die verschiedenen Methoden, die mit der Funktion verbunden sind, wurden ebenfalls diskutiert. Wir haben ein funktionierendes Live-Beispiel dieser Technik mit dieser und mehreren anderen Funktionen gesehen.
Es wurde ausführlich diskutiert, indem der Zweck jeder Zeile hervorgehoben wurde.
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn