Correspondance de modèles à l'aide d'OpenCV en Python

Manav Narula 30 janvier 2023
  1. Utilisez la fonction matchTemplate() pour effectuer une correspondance de modèle à l’aide d’OpenCV en Python
  2. Conclusion
Correspondance de modèles à l'aide d'OpenCV en Python

La librairie opencv en Python implémente de nombreuses techniques et algorithmes. Nous pouvons effectuer diverses tâches de vision par ordinateur et d’IA à l’aide de cette bibliothèque.

L’une de ces fonctionnalités de cette bibliothèque est la correspondance des modèles.

Détaillons cette technique. La correspondance de modèle consiste à vérifier si une petite partie d’une image fait partie d’une autre image ou non.

Cette petite partie (également appelée modèle) est déplacée horizontalement et verticalement sur l’image pour trouver la position la plus probable du modèle. La correspondance de modèles à l’aide de opencv a de nombreuses applications réelles, en particulier la détection d’objets.

Ce didacticiel montrera comment effectuer une correspondance de modèle à l’aide de opencv en Python.

Utilisez la fonction matchTemplate() pour effectuer une correspondance de modèle à l’aide d’OpenCV en Python

La fonction matchTemplate() peut être utilisée pour trouver la position d’un modèle donné dans une image. Nous pouvons transmettre les deux images à cette fonction, qui fera glisser le modèle dans les deux sens pour trouver le meilleur emplacement correspondant.

La densité de pixels de chaque emplacement est calculée, et celui avec la densité la plus élevée (pixel lumineux) est la correspondance la plus probable. Le matchTemplate() utilise plusieurs méthodes et est spécifié à l’aide du paramètre method.

Il y en a six au total : TM_CCOEFF, TM_CCOEFF_NORMED, TM_CCORR, TM_CCORR_NORMED, TM_SQDIFF et TM_SQDIFF_NORMED.

Notez que le TM_CCORR n’est pas considéré comme un bon choix en raison de ses résultats imprécis. Une autre chose à retenir est que pour les méthodes TM_SQDIFF et TM_SQDIFF_NORMED, nous sélectionnons la valeur minimale.

Cela sera clair avec les exemples ci-dessous.

Maintenant que nous avons discuté de cette fonction en détail, observons un exemple de travail. Le modèle et l’image complète sont affichés ci-dessous, suivis du code et du résultat.

Image:

Traitement de l’image

Modèle:

Modèle de traitement

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()

Production:

Correspondance de modèles à l’aide d’opencv en Python TM_CCOEFF

Voyons maintenant le code en détail. Nous commençons par lire les images requises.

Nous convertissons cette image en niveaux de gris à l’aide de la fonction cvtColor() pour convertir les images dans les espaces colorimétriques requis. Les images en noir et blanc offrent le meilleur résultat.

Nous passons le modèle et l’image à la fonction matchTemplate() avec la méthode TM_CCOEFF.

Cela renvoie un tableau numpy. Nous avons besoin d’un ensemble de valeurs de ce tableau pour trouver les coordonnées.

La fonction minMaxLoc() trouve les valeurs minimales et maximales d’un tableau et leurs index. Nous utilisons la position de la valeur maximale pour calculer les meilleures coordonnées de correspondance.

Nous utilisons la fonction rectangle() pour dessiner un rectangle sur la partie correspondante. L’image est alors affichée avec le résultat.

Les fonctions waitKey() et destroyAllWindows() empêchent la fenêtre de sortie de se fermer automatiquement et attendent une entrée de l’utilisateur.

Comme indiqué, nous pouvons utiliser les autres méthodes décrites dans la fonction matchTemplate() de la même manière. La seule différence est liée aux méthodes TM_SQDIFF et TM_SQDIFF_NORMED.

Nous pouvons les utiliser en modifiant légèrement notre code. Voir l’exemple suivant.

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()

Production:

Correspondance de modèles à l’aide d’opencv en python TM_SQDIFF

L’exemple ci-dessus montre que nous utilisons l’indice de valeur minimum pour calculer les coordonnées du modèle. Le code restant reste le même.

Conclusion

Ce didacticiel a démontré la technique de correspondance de modèles à l’aide de opencv en Python. Nous avons discuté des bases de la correspondance de modèles et de la fonction de la bibliothèque opencv qui implémente cette technique.

Les différentes méthodes associées à la fonction ont également été discutées. Nous avons vu un exemple de travail en direct de cette technique utilisant ceci et plusieurs autres fonctions.

Il a été discuté en détail en soulignant le but de chaque ligne.

Auteur: Manav Narula
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