Si eres de las personas que no les gusta estar encerrados en cubiculos, pero aun asi quieres trabajar, o realizar proyectos en casa, entonces te conviene leer esta sección. Para poder trabajar en la casa necesitaba bloquear la iluminación ambiental. El sol me agra
Al terminar de construir la caja le hice un orificio para colocar la cámara en la superficie superior, para que asi pudiera tener un acceso rapido a ella, ya sea para quemar los programas, bajarlos, analizar las imagenes de la tarjeta SD.
Vayamos a lo interesante.
Si ustedes quieren probar el tipo de iluminación y ver las imágenes que la cámara esta tomando en el momento, lo que pueden hacer es bajar el Frame Grabber de la cmucam y dentro de los programas que contiene el cc3 viene uno que es el cmucam2 carguen el archivo hexadecimal a su cámara y con él podran tomar imágenes por medio del programa Frame Grabber. Para utilizar el programa es sencillo, simplemente conecten su camara por el puerto serial. Enciendan la camara y presionen en la aplicacion el boton de connect. Al hacer esto se establece la coneccion con la cmucam y al presionar Grab Image, tomará una imagen y la desplegará en su pantalla. Así de sencillo.
Ahora digamos que se tiene una imagen como la de la izquierda.


Explicación breve de la función.
Renglones:
97-101: Se declaran variables del tipo indicado.
103: llama la funcion cc3_pixbuf_load(); aquí se carga la imagen de la cámara, en otras palabras toma una foto.
104: malloc separa un espacio de memoria y almacena un renglón de la imagen.
106-107 Toma los valores de ancho y alto de la imagen y los almacena en las variables size_x y size_y.
109 imprime en un archivo ppm el encabezado para comenzar a escribir los pixeles que conformarian la imagen.
111 simplemente toma el tiempo que tarda en grabar la imagen.
112-123 Entra en un ciclo donde recorre renglon por renglon y pixel por pixel cada renglon para grabar la imagen en formato ppm.
124 toma el tiempo en que acaba
125 hace una resta de tiempo final menos tiempo inicial.
127 libera el espacio de memoria.
129-131 imprime el tiempo que tardó.
Ahora incluye la clase hsv.h en tu archivo con el codigo #include agrega la clase cc3_hsv.h en el inicio de tu archivo. Al incluir la clase cerciorate de que el Make file dentro del folder ppm_grab incluya algo similar a lo siguiente:
PROJECT = ppm-grab
CSOURCES = main.c
INCLUDES =
LIBS = cc3-ilp
include ../../include/common.mk
Al tener esto no tendras problemas para compilar. Compila por medio de cygwin. Despues regresa a tu archivo main.c en el renglón 114 agrega el siguiente código: cc3_rgb2hsv_row(row);
Ahora abre C:\cc3\lib\cc3-ilp\hsv.c y dirigete a la funcion cc3_rgb2hsv. Esta funcion es la que nos va a hacer el cambio de color en los pixeles. Ahorita lo que hace es simplemente cambiar de rgb a hsv el valor de un pixel y como nosotros queremos el valor equivalente del pixel rgb en hsv sin cambiar el contenido del pixel entonces, nos dirigimos al final del codigo. Elimina los renglones 88-90.
pix->channel[CC3_CHANNEL_HUE] = hue;
pix->channel[CC3_CHANNEL_SAT] = sat;
pix->channel[CC3_CHANNEL_VAL] = val;
ahora con esta informacion que tienes del hue, sat y val puedes establecer tus rangos. Determina los valores maximos y minimos de cada una de las variables lo puedes sacar facil

Una vez que tengas los máximos y los mínimos puedes establecer los rangos de colores basandote primordialmente en el hue.
Pueden visitar YaflaColor para darse una idea de cómo

Les muestro dos imágenes que obtuve de mi playera anaranjada y de la pelota anaranjada. La primera la tome en la caja negra y la segunda en el piso de la biblioteca de la universidad. El piso es de una tonalidad amarilloverdosa y por lo mismo cae dentro de mi rango de amarillos. No se espanten por el ruido que lleguen a obtener en sus primeras imágenes solamente tienen que ajustar bien sus rangos de hue, sat y val. También ayuda mucho tener una iluminacion controlada como la de una biblioteca donde no interfiere la luz del sol y las lámparas iluminan todo de una forma casi homogenea.
Les deseo suerte en su implementación y cualquier duda que tengan no teman en preguntarme.
Saludos!
Próxima entrada: ¿Qué es el etiquetado?