Vorlagenabgleich mit OpenCV in Python

Manav Narula 15 Februar 2024
  1. Verwenden Sie die Funktion matchTemplate(), um den Vorlagenabgleich mit OpenCV in Python durchzuführen
  2. Fazit
Vorlagenabgleich mit OpenCV in Python

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:

Bild bearbeiten

Schablone:

Verarbeitungsvorlage

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:

Vorlagenabgleich mit opencv in Python TM_CCOEFF

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:

Vorlagenabgleich mit opencv in Python TM_SQDIFF

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 Narula avatar Manav Narula avatar

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