Identificación de color en imágenes usando Python y OpenCV
Identificar colores en imágenes es una tarea comúnmente realizada en visión por computadora y procesamiento de imágenes. Tiene una amplia gama de aplicaciones como detección de objetos, segmentación de imágenes y recuperación de imágenes. En este artículo, veremos cómo determinar los colores de una imagen usando Python y OpenCV.
Open CV is a popular computer vision library written in C/C++ with bindings for Python, OpenCV provides easy ways of manipulating color spaces. Open CV is open source and gives various algorithms useful in image processing.
Antes de identificar colores en una imagen, conozcamos algunos métodos comunes de representación de imágenes. En las imágenes digitales, los colores normalmente se representan utilizando el modelo de color RGB (rojo, verde, azul). En este modelo, cada color se representa como una combinación de tres colores básicos: rojo, verde y azul en función de algún valor. El rango de estos valores es de 0 a 255, donde 255 es la contribución máxima y 0 es la mínima.
Identificación de colores mediante OpenCV
Un histograma de color es una representación de la distribución de colores en una imagen utilizando la cantidad de píxeles presentes en un color particular y presentándolos en un histograma. Al estudiar este histograma, podemos conocer el color dominante de la imagen.
Podemos categorizar los colores en diferentes categorías de color y hacer histogramas de color para analizar los colores a través de ellos.
Para crear este histograma, necesitamos convertir nuestra imagen del espacio de color RGB a otro espacio de color como el espacio de color HSV, que representa la saturación de tono y el espacio de color de valor.
-
Después de haber convertido la imagen al espacio de color HSV, crearemos un histograma del componente Tono de la imagen dada.
El componente Tono representará la información de color real de la imagen, y los componentes Saturación y Valor representarán el brillo y la intensidad del color.
Identificación de colores mediante OpenCV
Veamos los pasos sobre cómo podemos realizar la identificación del color en imágenes usando Python y OpenCV.
Paso 1: importar las bibliotecas necesarias
Para convertir imágenes entre los espacios de color BGR y RGB, necesitamos importar las bibliotecas necesarias. Usaremos las siguientes bibliotecas:
OpenCV - Para leer y manipular imágenes.
Matplotlib - Para mostrar imágenes.
import cv2
import numpy as np
Paso 2: cargue la imagen y conviértala al espacio de color HSV
Ahora cargaremos la imagen y la convertiremos al espacio de color HSV.
img = cv2.imread('image.jpg')
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
Paso 3: definir la gama de colores
Necesitamos definir los límites inferior y superior de la gama de colores que queremos detectar. Podemos usar la función inRange() de OpenCV para extraer los píxeles dentro del rango de colores.
lower_range = (0, 50, 50) # lower range of red color in HSV
upper_range = (10, 255, 255) # upper range of red color in HSV
mask = cv2.inRange(hsv_image, lower_range, upper_range)
Paso 4: aplique una máscara a la imagen
Podemos aplicar la máscara que obtuvimos en el paso anterior a la imagen original para que hsv_img extraiga solo los píxeles dentro del rango de color.
color_image = cv2.bitwise_and(image, image, mask=mask)
Paso 5: muestre la imagen en color
Finalmente, podemos mostrar la imagen en color que contiene solo los píxeles dentro del rango de color que especificamos.
# Display the color image
cv2.imshow('Color Image', color_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Ejemplo
import cv2
import numpy as np
img = cv2.imread('image_red.jpg')
cv2.imshow('Original Image', img)
cv2.waitKey(0)
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# lower range of red color in HSV
lower_range = (0, 50, 50)
# upper range of red color in HSV
upper_range = (150, 255, 255)
mask = cv2.inRange(hsv_img, lower_range, upper_range)
color_image = cv2.bitwise_and(img, img, mask=mask)
# Display the color of the image
cv2.imshow('Coloured Image', color_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Producción
Imagen original −
Imagen en color −
Detectar diferentes colores
En el código anterior, hemos identificado los píxeles dentro del rango de color rojo. Podemos modificar los rangos inferior y superior para detectar diferentes colores. Por ejemplo, si necesita detectar el color verde, podemos configurar los rangos inferior y superior de la siguiente manera:
import cv2
import numpy as np
img = cv2.imread('image1.jpg')
cv2.imshow('Original Image', img)
cv2.waitKey(0)
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_range = (12, 25, 25) # lower range of green color in HSV
upper_range = (86, 255, 255) # upper range of green color in HSV
mask = cv2.inRange(hsv_img, lower_range, upper_range)
color_image = cv2.bitwise_and(img, img, mask=mask)
cv2.imshow('Coloured Image', color_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Producción
Imagen original −
Imagen en color −
Conclusión
En este artículo hablamos sobre la identificación de colores. La identificación de colores se utiliza comúnmente en visión por computadora y procesamiento de imágenes. Discutimos cómo podemos identificar el color en imágenes usando el lenguaje Python y la biblioteca OpenCV de Python. Aprendimos sobre diferentes tipos de modelos de color como RGB y HSV. Vimos cómo podemos crear un histograma de color y usarlo para identificar los colores dominantes en una imagen. También vimos cómo podemos mostrar esos colores dominantes.