Détection de couleur d'image à l'aide d'OpenCV en Python

Manav Narula 30 janvier 2023
  1. Détection de couleur d’image à l’aide de la bibliothèque OpenCV en Python
  2. Conclusion
Détection de couleur d'image à l'aide d'OpenCV en Python

La bibliothèque OpenCV est créée pour faciliter les tâches de vision par ordinateur et est compatible avec divers langages de programmation. La bibliothèque a des implémentations de différents algorithmes et techniques utiles pour traiter les images.

Ce didacticiel montrera comment effectuer la détection des couleurs dans une image à l’aide de la bibliothèque OpenCV de Python.

Il existe diverses applications pour la détection des couleurs. Nous pouvons l’utiliser pour distinguer des objets dans la vie réelle. Cela peut également être considéré comme une technique de segmentation d’image car nous essayons d’étiqueter chaque pixel en fonction de caractéristiques similaires.

Nous détecterons la couleur à l’aide de l’espace colorimétrique HSV, qui signifie Hue Saturation Value. Il s’agit d’un espace colorimétrique cylindrique, très utile lorsque vous travaillez avec des informations de couleur.

La teinte détermine les informations de couleur, la saturation représente l’intensité de la couleur et la valeur détermine la luminosité en fonction de la quantité de couleur mélangée au noir.

Détection de couleur d’image à l’aide de la bibliothèque OpenCV en Python

Nous utiliserons diverses fonctions de la bibliothèque OpenCV pour la détection des couleurs. Discutons-en ci-dessous.

Nous allons détecter une couleur spécifique dans une image donnée et ajouter des limites autour des segments détectés.

Nous devons convertir l’image requise de l’espace colorimétrique BGR en HSV. Pour effectuer de telles conversions dans les images, nous pouvons utiliser la fonction cvtColor() de la bibliothèque OpenCV.

Nous avons besoin des limites pour la couleur donnée et renvoyons un masque binaire des endroits où la couleur est présente dans l’image. La fonction inRange() d’OpenCV prend une image donnée et renvoie le masque binaire de l’endroit où la couleur est actuellement basée sur les limites supérieure et inférieure spécifiées.

Ce masque est le sous-ensemble de l’image où la couleur est détectée.

On peut alors appliquer des opérations morphologiques à ce masque binaire pour filtrer les bruits parasites. Nous allons utiliser la fonction morphologyex() de la bibliothèque OpenCV pour y parvenir.

Il effectue une érosion après dilatation pour fermer les petits trous dans l’objet.

Nous devons également ajouter des limites à l’image en utilisant ce masque binaire créé.

bitwise_and() est utilisé pour segmenter les parties de l’image qui correspondent à un masque donné. Le masque est fourni à l’aide du paramètre mask.

Il compare chaque pixel de l’image source et correspond à celui correspondant dans le masque spécifié.

Pour ajouter les contours à cette image segmentée, nous allons utiliser les deux méthodes, findContours() et drawContours(). Ce contour peut être considéré comme une courbe joignant des points le long d’une frontière pour une image segmentée.

La première fonction renvoie une liste de tous les contours pour l’image donnée. Nous allons utiliser la fonction drawcontours() pour dessiner les contours.

Implémentons maintenant le code de détection de couleur et trouvons la couleur verte dans l’image suivante.

Exemple d’image pour la détection des couleurs

Code:

import cv2
import numpy as np

img = cv2.imread("img3.jpeg")
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
bound_lower = np.array([25, 20, 20])
bound_upper = np.array([100, 255, 255])

mask_green = cv2.inRange(hsv_img, bound_lower, bound_upper)
kernel = np.ones((7, 7), np.uint8)

mask_green = cv2.morphologyEx(mask_green, cv2.MORPH_CLOSE, kernel)
mask_green = cv2.morphologyEx(mask_green, cv2.MORPH_OPEN, kernel)

seg_img = cv2.bitwise_and(img, img, mask=mask_green)
contours, hier = cv2.findContours(
    mask_green.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE
)
output = cv2.drawContours(seg_img, contours, -1, (0, 0, 255), 3)

cv2.imshow("Result", output)
cv2.waitKey(0)
cv2.destroyAllWindows()

Production:

Couleur verte détectée à l’aide d’OpenCV en Python

Soyons maintenant informés du code implémenté.

La fonction imread() lit l’image. Nous avons converti l’espace colorimétrique de cette image de BGR en HSV à l’aide de la fonction cvtColor() ; notez le paramètre cv2.COLOR_BGR2HSV dans la fonction.

Nous avons ensuite spécifié les valeurs limites supérieure et inférieure pour détecter la couleur verte dans l’image et créé le masque binaire à l’aide de la fonction inRange().

Le bruit est retiré deux fois de ce masque à l’aide de la fonction morphologyEx().

Pour la première fois, avec le paramètre cv2.MORPH_CLOSE, nous avons filtré le bruit blanc de la partie noire. Et pour la deuxième fois, nous avons utilisé le cv2.MORPH_CLOSE pour filtrer le bruit noir de la partie blanche.

Ensuite, nous avons tracé les limites sur la partie segmentée. Nous avons déterminé la partie segmentée et ses contours à l’aide de la méthode findContours() et tracé la frontière avec la méthode drawContours().

Conclusion

Ce didacticiel explique comment effectuer la détection des couleurs à l’aide d’OpenCV en Python. Nous avons travaillé avec une image et détecté les parties qui correspondaient à la couleur verte.

Il y a plusieurs étapes associées à cela. Nous devons convertir l’image dans l’espace colorimétrique HSV correct et créer le masque pour la couleur requise.

Ensuite, nous devons filtrer le bruit de ce masque. Ce masque est ensuite utilisé avec l’image d’origine pour segmenter la partie détectée, et nous traçons des limites dessus.

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

Article connexe - Python OpenCV