04: Espacios de color
En esta entrada vamos a hacer un repaso a los diferentes espacios de color que nos podemos encontrar en el mundo de la visión artificial o visión por computador
Espacios de color
Según Wikipedia, «Un espacio de color es un sistema de interpretación del color, es decir, una organización específica de los colores en una imagen o video. «
OpenCV soporta muchos espacios de color diferentes. Por defecto OpencV ,usará como hemos comentado en las entradas anteriores, el espacio de color BGR, pero podemos movernos en otros muchos espacios de color más. Tratar de explicar al detalle cda espacio de color y cómo el color es percibido por el ser humano y cómo lo hace nuestro ordenador, nos llevaría mucho tiempo, por lo que en esta entrada nos centraremos en los tres más comunes en OpenCV
Espacio de color BGR
Este es el espacio de color más común en OpenCV, en el espacio BGR la primera componente es el azul (blue), la segunda es el verde (green), y la tercera el rojo (red)

Cuando tenemos una imagen a color en formato BGR y ejecutemos la siguiente línea dentro de nuestro programa,
Esto en nuestro caso nos va a devolver por pantalla: (554, 980, 3) , que corresponde con el tamaño de la imagen, es decir el tamaño de la matriz que forma la imagen, como ya hemos visto antes, y un 3 al final. Ese 3 representa cada color, azul, rojo y verde , 3.

Vamos a pasar nuestra imagen a escala de grises, esto es muy común en la visión artificial para realizar operaciones como la creación de máscaras, la detección de formas , etc. Para ello utilizaremos el siguiente comando, recuerda que tienes el código en nuestro Github
Es decir creamos una variable llamada «gris». En esta variable cargamos la imagen original (image) pero realizando una conversión de color de BGR a gray, Ahora la mostramos por pantalla
Si ahora preguntamos por el tamaño de la imagen gris

Se nos devolverá por pantalla: (554.980). Importante diferencia con la anterior, no hay 3, es decir es un 1. Porqué?? Porque ahora no tenemos una matriz de tres dimensiones como antes en la que almacenar el color, ahora solo hay una dimensión que almacena el valor del pixel. Al ser una escala de grises siendo 0 negro y 255 blanco, con una dimensión es suficiente para defionir la imagen.
Conocer que la dimensión de una imagen en escala de grises es uno, es importante, ya que para realizar operaciones con matrices, como puede ser sumar imágenes, etc, estas matrices deben ser del mismo tamaño y dimensión.
Subscríbete a nuestro blog
Espacio de color HSV
El espacio BGR presenta un problema principal, y es que los valores que toman R,G y B no son muy intuitivos y proporcionales para el ser humano, por lo que se hace difícil trabajar con este sistema. es por eso que vamos a ver el espacio de color HSV

Si nos fijamos en la gráfica de arriba, tenemos como primer valor el Hue, h, este es el valor que me va a decir el color, es decir si es azul, si es rojo, si verde …, sus valores van de 0 a 179
El siguiente valor es la Saturación, s. Este indica cómo de saturado de color está, a más saturación mas intenso es el color, va de 0 a 255. El último valor Value, v indica cuánto negro tiene esa color, a más value menos negro, va de 0 a 255.
Porqué usar entonces el espacio de color hsv?? Por que es más intuitivo para el ser humano usar este espacio, si queremos variar el color no tenemos más que elegir un valor de hue, y ir tocando un poco s y v para poder elegir exactamente la tonalidad que deseamos. Esto con el BGR es imposible. En futuras entradas haremos un ejemplo donde filtraremos las imágenes según el color, y esto lo haremos con hsv, ya que con BGR no sería posible hacerlo con lógica.
Vamos a pasar nuestra imagen original en BGR a HSV, para ello, escribiremos, recuerda que tienes el código en nuestro Github:
Es decir creamos una variable llamada «hsv». En esta variable cargamos la imagen original (image) pero realizando una conversión de color de BGR a HSV, Ahora la mostramos por pantalla

Si ahora preguntamos por el tamaño de la imagen hsv
Nos devolverá exactamente el mismo tamaño, (554.980,3), ya que no hemos variado el tamaño y además nos devolverá un 3, ya que una matriz es para H, otra matriz para S y otra para V, Recordemos que en el BGR una matriz es para B, otra para G y otra para R
Y así acabamos esta entrada, espero que os haya parecido interesante, hasta otra!!