Espacios de color en OpenCV y Python
Los espacios de color son diferentes tipos de modos de color, utilizados en el procesamiento de imágenes y señales y sistemas para diversos fines.
Open CV es una popular biblioteca de visión por computadora escrita en C/C++ con enlaces para Python; OpenCV proporciona formas sencillas de manipular espacios de color. Open CV es de código abierto y ofrece varios algoritmos útiles en el procesamiento de imágenes.
En visión por computadora, los colores se representan mediante espacios de color. Hay muchísimos espacios de color que se utilizan actualmente en la visión por computadora y el procesamiento de imágenes, y cada uno tiene sus propias características y ventajas únicas. Algunos de los espacios de color más comunes en el procesamiento de imágenes se describen a continuación:
Espacio de color RGB
Veamos sobre el espacio de color RGB. Es uno de los espacios de color más utilizados y populares para el procesamiento de imágenes. En este espacio de color, la imagen se representa como una combinación de tres colores rojo, verde y azul, donde cada color tiene algún valor asignado. Este valor varía de 0 a 255. Cuanto mayor es el valor, mayor es la presencia de ese color. Mediante la combinación de estos 3 colores podemos formar todos los colores posibles en el espectro visible.
La función OpenCV cv2.imread() se puede utilizar para leer un archivo de imagen y devolver una matriz NumPy que representa los valores de píxeles de la imagen. Los valores de píxeles se representan como conjuntos (B, G, R), donde B, G y R representan los valores de intensidad de los canales azul, verde y rojo, respectivamente.
Ejemplo
En el siguiente ejemplo, leemos una imagen y separamos los diferentes canales de color de una imagen en particular usando la función cv2.imshow().
Esto devuelve tres matrices separadas correspondientes a los tres colores rojo, verde y azul al esperar en el medio a que se presione una tecla entre dos imágenes.
Luego muestra estas imágenes con los colores correspondientes. Y los cierra todos al final mediante la función destroyAllWindows() al final.
import cv2
image = cv2.imread(image.jpg)
B, G, R = cv2.split(image)
# Corresponding channels are separated
cv2.imshow("original", image)
cv2.waitKey(0)
cv2.imshow("blue", B)
cv2.waitKey(0)
cv2.imshow("Green", G)
cv2.waitKey(0)
cv2.imshow("red", R)
cv2.waitKey(0)
cv2.destroyAllWindows()
Producción
Imagen original
Imagen azul
Imagen verde
Imagen roja
Espacio de color HSV
HSV significa Tono, Saturación y Valor. El canal Tono representa el matiz del color, mientras que el canal Saturación representa la intensidad o pureza del color. El canal Valor representa el brillo del color.
Es particularmente útil para tareas de segmentación de imágenes basadas en colores, donde necesitamos aislar colores específicos en una imagen. En OpenCV, podemos convertir una imagen RGB al espacio de color HSV usando la función cv2.cvtColor().
import cv2
import numpy as np
# Read an image in RGB color space
image = cv2.imread('image.jpg')
# show original image
cv2.imshow("original image",image)
cv2.waitKey(0)
# Convert the image to HSV color space
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# show hsv image
cv2.imshow("hsv image",hsv_image)
cv2.waitKey(0)
Producción
Imagen original −
Imagen HSV −
Espacio de color YCbCr
El espacio de color YCbCr separa los componentes de luminancia (Y) y crominancia (CbCr) de una imagen. El canal Y representa el brillo del color, mientras que los canales Cb y Cr representan las diferencias de color azul y rojo, respectivamente.
Es particularmente útil en la compresión y transmisión de video, donde se puede usar para reducir la cantidad de datos necesarios para representar una imagen o una secuencia de video.
En OpenCV, podemos convertir una imagen RGB al espacio de color YCbCr pasando cv2.COLOR_BGR2YCrCb e ingresando la imagen como parámetro a la función cv2.cvtColor().
import cv2
import numpy as np
# Read an image in RGB color space
image = cv2.imread('image5.jpg')
# show original image
cv2.imshow("original image",image)
cv2.waitKey(0)
# Convert the image to YCbCr color space
ycbcr_image = cv2.cvtColor(image, cv2.COLOR_BGR2YCrCb)
# show ycbcr image
cv2.imshow("ycbcr image", ycbcr_image)
cv2.waitKey(0)
Producción
Imagen original −
Imagen YCbCr −
Algunos de los otros espacios de color son:
Espacio de color LAB
Espacio de color LUV
espacio de color XYZ
Espacio de color CMYK
Conclusión
En este artículo, analizamos algunos de los espacios de color más utilizados en OpenCV y Python. Hablamos sobre los espacios de color RGB, HSV y YCbCr. También aprendimos cómo podemos convertir una imagen de un espacio de color a otro espacio de color usando la función cv2.cvtColor() de la biblioteca OpenCV. Entendimos los diferentes espacios de color y cómo funciona cada uno de ellos en OpenCV. Podemos usar esto para manipular y analizar diferentes imágenes en consecuencia y extraer de ellas la información requerida. Aprendimos sobre las ventajas y desventajas de diferentes espacios de color y qué espacio de color elegir para una tarea específica.