Couleurs de détection OpenCV

Ammar Ali 12 avril 2022
Couleurs de détection OpenCV

Ce tutoriel traitera de la détection des couleurs dans les images à l’aide de la fonction inRange() d’OpenCV en Python.

Utilisez la fonction inRange() d’OpenCV pour détecter les couleurs sur les images en Python

On peut détecter et extraire les couleurs présentes dans une image grâce à la fonction inRange() d’OpenCV. Parfois, nous voulons supprimer ou extraire la couleur de l’image pour une raison quelconque.

Nous pouvons utiliser la fonction inRange() de OpenCV pour créer un masque de couleur, ou en d’autres termes, nous pouvons détecter une couleur en utilisant la gamme de cette couleur. Les couleurs sont stockées dans un format de valeur de triplet RVB à l’intérieur d’une image couleur.

Pour créer son masque, nous devons utiliser la valeur du triplet RVB de la version claire et sombre de cette couleur. Par exemple, dans une image BRG, si nous voulons extraire la couleur rouge, nous pouvons utiliser (0,0,50) pour le rouge clair et (255,50,50) pour la couleur rouge foncé pour créer un masque de couleur rouge.

Nous pouvons transmettre l’image et les valeurs BRG inférieure et supérieure pour créer un masque.

Par exemple, lisons une image contenant des cercles de différentes couleurs et créons un masque de couleur rouge et un masque de couleur verte. Voir le code ci-dessous.

import cv2

img = cv2.imread("download.png")

# mask of red color
mask1 = cv2.inRange(img, (0, 0, 50), (50, 50, 255))

# mask of blue color
mask2 = cv2.inRange(img, (50, 0, 0), (255, 50, 50))

cv2.imshow("Original Image", img)
cv2.imshow("mask red color", mask1)
cv2.imshow("mask blue color", mask2)
cv2.waitKey(0)

Production :

faire un masque avec inrange

On peut comparer les deux masques avec l’image d’origine pour savoir s’ils contiennent la bonne couleur ou non. Nous pouvons voir que le masque un est au-dessus de la couleur rouge et le masque deux est au-dessus de la couleur bleue.

La fonction inRange() crée une nouvelle image binaire similaire à l’image d’origine. Comme vous le voyez, il n’y a que deux couleurs dans l’image du masque blanc et noir.

La fonction inRange() fixe la valeur de la couleur à 1 ou blanc si la couleur est présente dans la gamme de couleurs donnée et à 0 si la couleur n’est pas présente dans la gamme de couleurs spécifiée. L’image ci-dessus était dans l’échelle de couleurs BRG.

C’est pourquoi nous avons utilisé les valeurs BRG dans la fonction inRange(), mais nous pouvons également convertir des images vers d’autres échelles de couleurs comme HSV, et dans ce cas, nous utiliserons la valeur d’échelle HSV pour créer un masque. Extrayons maintenant les couleurs rouge et bleue de l’image.

Pour extraire les deux couleurs, il faut combiner les deux masques pour créer un seul masque en utilisant la fonction bitwise_or() d’OpenCV. Après cela, nous pouvons utiliser la fonction bitwise_and() d’OpenCV pour extraire les couleurs de l’image en utilisant l’image comme premier et deuxième argument et le masque comme troisième argument.

Voir le code ci-dessous.

import cv2

img = cv2.imread("download.png")

# mask of red color
mask1 = cv2.inRange(img, (0, 0, 50), (50, 50, 255))

# mask of blue color
mask2 = cv2.inRange(img, (50, 0, 0), (255, 50, 50))

# final mask
mask = cv2.bitwise_or(mask1, mask2)
target = cv2.bitwise_and(img, img, mask=mask)

cv2.imshow("Original Image", img)
cv2.imshow("mask red color", mask1)
cv2.imshow("mask blue color", mask2)
cv2.imshow("mask of both colors", mask)
cv2.imshow("target colors extracted", target)
cv2.waitKey(0)

Production :

extraire la couleur de l’image

La couleur rouge et bleue est extraite avec succès de l’image donnée, comme on le voit dans la dernière image. Pour convertir un espace colorimétrique en un autre, on peut utiliser la fonction cvtColor() d’OpenCV.

Si nous avons une image avec un espace colorimétrique HSV, nous devons utiliser les valeurs HSV pour créer un masque. En HSV, la couleur a trois valeurs Teinte, Saturation et Valeur qui définissent la couleur.

Auteur: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

Article connexe - Python OpenCV

Article connexe - OpenCV Image