sábado, 17 de abril de 2010

OpenCV con C xD - Parte 02

n_n al comentar cvSetImageROI no limitamos el area a procesar.

#include <stdio.h>
/*Algoritmos principales*/

#include "cv.h"
/*GUI y Video*/

#include "highgui.h"


CvHaarClassifierCascade *cascade_cara;
CvHaarClassifierCascade *cascade_ojo;
CvMemStorage *storage;


void ReconocerRostroOjos(IplImage *imagen);


/*--------------------------------------------------------------*/

int main(){
    CvCapture *captura = 0;  
    IplImage *imagen;
    char *cara = "haarcascade_frontalface_default.xml";
    char *ojo = "haarcascade_eye.xml";
    int key=0;

    /* Cargando el clasificador de rostro */

    cascade_cara = (CvHaarClassifierCascade*)cvLoad(cara, 0, 0, 0);


    /* Cargando el clasificador de ojos */

    cascade_ojo = (CvHaarClassifierCascade*)cvLoad(ojo, 0, 0, 0);


    /*Declarando storage para detectar los ojos */

    storage = cvCreateMemStorage(0);

 
    captura = cvCaptureFromCAM( 0 ); 
    if ( !captura ) {
      fprintf( stderr, "No se encuentra la  webcam!\n" );
      return 1;
    } 
 
    /* Crea una ventana */

    cvNamedWindow("n_n", CV_WINDOW_AUTOSIZE);

    while( key != 'q' ) {
   imagen = cvQueryFrame( captura );
      if( !imagen ) break;  
      /* Reconocer rostro y ojos*/

      ReconocerRostroOjos(imagen);
      cvShowImage("n_n", imagen);
  
      if( cvWaitKey( 10 ) >= 0 )
        break;
   }  
    /*Deja de capturar*/
    cvReleaseCapture(&captura);
    cvDestroyWindow("n_n");
    return 0;
}


void ReconocerRostroOjos(IplImage *imagen){

int i;
/*Reconocer rostro*/ 
CvSeq *faces = cvHaarDetectObjects(imagen, cascade_cara, storage,1.1, 2,0,cvSize(40, 40));
 
/* Salgo si se encuentra*/

if (faces->total == 0) return;

/* Dibujar un rectangulo */

CvRect *r = (CvRect*)cvGetSeqElem(faces, 0);
cvRectangle(imagen,cvPoint(r->x, r->y),cvPoint(r->x + r->width, r->y + r->height),CV_RGB(255, 0, 0), 1, 8, 0);
/* Limpio el buffer para trabajar con la siguiente imagen*/

cvClearMemStorage(storage);


/*Posicion de los ojos o region de interes dentro de la imagen principal*/

//cvSetImageROI(imagen, cvRect(r->x, r->y + (r->height/5.5), r->width, r->height/3.0));


/* Reconocer los ojos*/

CvSeq* ojos = cvHaarDetectObjects(imagen, cascade_ojo, storage,1.1, 2,0,cvSize(20, 20));


 /* Dibujar un circulo */

 for( i = 0; i < (ojos ? ojos->total : 0); i++ ) {
    r = (CvRect*)cvGetSeqElem( ojos, i );
    cvCircle( imagen,cvPoint(r->x + r->width*0.5, r->y + r->height*0.5),20, cvScalar(0,255,0), 1);
  
 }
  
cvResetImageROI(imagen);
} 
 
Gran parte de la documentacion que me ayudo a esto, son estos link's: 
http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html

http://www710.univ-lyon1.fr/~bouakaz/OpenCV-0.9.5/docs/

No hay comentarios:

IRC

#freenode->#usljujuy

Seguidores

Eventos n_n

Tira Ecol Nano,Bilo y Luca