ros tutorial

02: Fundamentos de las imágenes en OpenCV II : Espacios de color

fractal2

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)

bgr

Cuando tenemos una imagen a color en formato BGR y ejecutemos la siguiente línea dentro de nuestro programa, 

				
					print (image.shape)
				
			

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. 

bgr

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

				
					gris = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
				
			

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

				
					cv2.imshow('logo_opencv,gris)

				
			

Si ahora preguntamos por el tamaño de la imagen gris 

				
					print (gris.shape)
				
			
opencv_grayscale

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 

 

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. 

				
					hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
				
			

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

				
					cv2.imshow('logo_hsv',hsv)
				
			
hsv

Si ahora preguntamos por el tamaño de la imagen hsv

				
					print (hsv.shape)
				
			

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!!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

ROS_custom_message

10 ROS Custom Message

ROS Custom Message Fundamentos de ROS Accede a otros posts En tutoriales anteriores a la hora de la comunicación pub/sub, siempre hemos usado mensajes predefinidos

Read More »

This website uses cookies to ensure you get the best experience on our website. By continuing to browse on this website, you accept the use of cookies for the above purposes.