Colores de detección de OpenCV

Ammar Ali 12 abril 2022
Colores de detección de OpenCV

Este tutorial discutirá la detección de colores en imágenes usando la función inRange() de OpenCV en Python.

Utilice la función inRange() de OpenCV para detectar colores en imágenes en Python

Podemos detectar y extraer colores presentes en una imagen utilizando la función inRange() de OpenCV. A veces, queremos eliminar o extraer color de la imagen por alguna razón.

Podemos usar la función inRange() de OpenCV para crear una máscara de color, o en otras palabras, podemos detectar un color usando el rango de ese color. Los colores se almacenan en un formato de valor de triplete RGB dentro de una imagen en color.

Para crear su máscara, tenemos que usar el valor del triplete RGB de la versión clara y oscura de ese color. Por ejemplo, en una imagen BRG, si queremos extraer el color rojo, podemos usar (0,0,50) para el rojo claro y (255,50,50) para el color rojo oscuro para crear una máscara de color rojo.

Podemos pasar la imagen y los valores BRG inferior y superior para crear una máscara.

Por ejemplo, leamos una imagen que contiene algunos círculos de diferentes colores y creemos una máscara de color rojo y una máscara de color verde. Vea el código a continuación.

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)

Producción:

haciendo máscara usando inrange

Podemos comparar las dos máscaras con la imagen original para saber si contienen el color correcto o no. Podemos ver que la máscara uno está encima del color rojo y la máscara dos está encima del color azul.

La función inRange() crea una nueva imagen binaria similar a la imagen original. Como puede ver, solo hay dos colores en la imagen de la máscara, blanco y negro.

La función inRange() establece el valor del color en 1 o blanco si el color está presente en el rango de colores dado y 0 si el color no está presente en el rango de colores especificado. La imagen de arriba estaba en la escala de color BRG.

Es por eso que usamos valores BRG dentro de la función inRange(), pero también podemos convertir imágenes a otras escalas de color como HSV, y en este caso, usaremos el valor de la escala HSV para crear una máscara. Ahora extraigamos los colores rojo y azul de la imagen.

Para extraer los dos colores, tenemos que combinar las dos máscaras para crear una sola máscara usando la función bitwise_or() de OpenCV. Después de eso, podemos usar la función bitwise_and() de OpenCV para extraer los colores de la imagen usando la imagen como primer y segundo argumento y la máscara como tercer argumento.

Vea el código a continuación.

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)

Producción:

extrayendo color de la imagen

El color rojo y azul se extrae con éxito de la imagen dada, como se ve en la última imagen. Para convertir un espacio de color a otro, podemos usar la función cvtColor() de OpenCV.

Si tenemos una imagen con espacio de color HSV, debemos usar los valores HSV para crear una máscara. En HSV, el color tiene tres valores Tono, Saturación y Valor que definen el color.

Autor: 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

Artículo relacionado - Python OpenCV

Artículo relacionado - OpenCV Image