día 0: Toma de contacto con C y OpenCV

Antes de enfrentarse  a un programa en C, es necesario adquirir una serie de conocimientos básicos sobre este lenguaje, viendo sus principales diferencias con el lenguaje de programación estudiado previamente en la escuela, que es Java. Encontramos tutoriales en la página web del laboratorio, en la sección de vídeos y transparencias. El link es http://lsed.die.upm.es/?status=videos.

Una vez comenzamos a conocer ciertos aspectos básicos sobre C, podemos enfrentarnos a un programa, en nuestro caso, el programa que utilizamos como base es el “facedetect.c”, que está dentro de la carpeta de Samples de la biblioteca de OpenCV. Para comenzar a trabajar con él, debemos cargar la biblioteca de OpenCV y hacer una serie de cambios:

  1. Dentro de cvsample, eliminar el archivo .c que haya, y añadir el objeto que queremos, que es el facedetect.c.
  2. Ahora debemos hacer cvsample proyecto principal ( StartUp Proyect en inglés).
  3. Compilamos, y empieza a funcionar el programa que va a ser nuestra base de detección de caras.

Como vemos, el programa en un principio, abre una pantalla con lo que está grabando la webcam del ordenador, y crea un círculo en las caras que detecta.

Ahora debemos de pasar a analizar el programa. Nuestro primer objetivo va a ser estructurarlo en funciones específicas y no complicadas, ya que el programa actualmente sólo tiene una función main y una función detect_and_draw, para detectar y dibujar.

Lo que hacemos es crear nuevas funciones, de tal forma que quedarán declaradas las siguientes funciones, de momento:


void detect_and_draw( IplImage* image);

int Init(CvCapture** captu, IplImage **imag, const char** input_nam, int arg_c, char** argv );

void ImageProcess(CvCapture** captu, IplImage **imag,const char** input_nam);

Como observamos es necesario hacer punteros a punteros, porque dentro de cada función se van a modificar los punteros usados por otras funciones, y por tanto no deben ser variables locales, sino globales, y así después poder ser utilizadas.


Ahora el main queda más sencillo, y básicamente crea las variables globales, y sus respectivos punteros, y llama a las funciones que necesite el programa. A la función detect_and_draw, se le llama desde ImageProcess, y también será necesario dividirla en dos funciones: detect y draw, como su propio nombre indica.

int main( int argc, char ** argv ){

const char * input_name = 0;

const char ** i_n = &input_name;

CvCapture* capture = 0;

CvCapture** capt = &capture;

IplImage *image = 0;

IplImage **imge = ℑ

Init(capt, imge, i_n, argc,argv);

ImageProcess(capt, imge, i_n);

}

Ahora ya tenemos el programa un poco más organizado y  podemos comenzar a añadir nuevas funciones al programa, cosa que comenzaremos el siguiente día.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: