06/01/12 15:15
solo_soletto
Ciao a tutti!
Sono nuovo nel forum e spero possiate aiutarmi!
Sto lavorando ad un programma nella quale 3 webcam controllano se viene rilevato un volto.
Nel caso in cui un volto venisse trovato si deve aprire una finestra che visualizza un'immagine o altro.
Il mio problema è sapere come posso inserire all'interno del codice la funzione che mi apre la finestra. Il punto è che vorrei mettere un contatore:la finestra si deve aprire quando viene rilevato un volto (si deve aprire UNA volta sola, non tutte le volte che viene rilevato..altrimenti si aprirebbero mille finestre!) e poi chiudersi se non viene trovato niente dopo un tot di tentativi.
Il programma è scritto in linguaggio C ed è il seguente. E' scritto utilizzando le librerie Open CV. Conosco gà la funzione "cvShowImage", ma voglio sapere dove inserirla all'interno del codice per far sì che si apra una volta sola e dove mettere il contatore.
Riuscite a darmi una mano?? Grazie
Ecco il codice:
Sono nuovo nel forum e spero possiate aiutarmi!
Sto lavorando ad un programma nella quale 3 webcam controllano se viene rilevato un volto.
Nel caso in cui un volto venisse trovato si deve aprire una finestra che visualizza un'immagine o altro.
Il mio problema è sapere come posso inserire all'interno del codice la funzione che mi apre la finestra. Il punto è che vorrei mettere un contatore:la finestra si deve aprire quando viene rilevato un volto (si deve aprire UNA volta sola, non tutte le volte che viene rilevato..altrimenti si aprirebbero mille finestre!) e poi chiudersi se non viene trovato niente dopo un tot di tentativi.
Il programma è scritto in linguaggio C ed è il seguente. E' scritto utilizzando le librerie Open CV. Conosco gà la funzione "cvShowImage", ma voglio sapere dove inserirla all'interno del codice per far sì che si apra una volta sola e dove mettere il contatore.
Riuscite a darmi una mano?? Grazie
Ecco il codice:
#include <stdio.h> #include "cv.h" #include "highgui.h" #include <stdlib.h> CvHaarClassifierCascade *cascade; CvMemStorage *storage; int detectFaces (IplImage *img, int cameraId); CvSeq *faces; int w,h; int main (int argc, char **argv) { CvCapture* capture1 = cvCaptureFromCAM(0); CvCapture* capture2 = cvCaptureFromCAM(1); CvCapture* capture3 = cvCaptureFromCAM(2); if ( !capture1 || !capture2 || !capture3 ) { fprintf( stderr, "Errore: Impossibile inizializzare la webcam!\n" ); return 1; } int key=0; char *filename = "haarcascade_frontalface_alt.xml"; cascade = (CvHaarClassifierCascade *) cvLoad (filename, 0, 0, 0); storage = cvCreateMemStorage (0); assert(cascade && storage && capture1 && capture2 && capture3); w = GetSystemMetrics(SM_CXSCREEN); h = GetSystemMetrics(SM_CYSCREEN); printf("\n\t\t\t --- Face Detection ---\n\n\n\nScreen Resolution: %dx%d\n\n\n",w,h); cvNamedWindow ("Camera left", CV_WINDOW_FULLSCREEN); cvNamedWindow ("Camera right", CV_WINDOW_FULLSCREEN); cvNamedWindow ("Camera central", CV_WINDOW_FULLSCREEN); int ok1 = TRUE; int ok2 = TRUE; int ok3 = TRUE; while (key != 27) { do { IplImage* frame1 = cvQueryFrame (capture1); cvFlip (frame1, frame1, 1); frame1->origin = 0; ok1=detectFaces(frame1,1); cvShowImage ( "Camera left", frame1); } while(ok1); do { IplImage* frame2 = cvQueryFrame (capture2); cvFlip (frame2, frame2, 1); frame2->origin = 0; ok2 = detectFaces(frame2,2); cvShowImage ( "Camera right", frame2); } while(ok2); do { IplImage* frame3 = cvQueryFrame (capture3); cvFlip (frame3, frame3, 1); frame3->origin = 0; ok3 = detectFaces(frame3,3); cvShowImage ( "Camera central", frame3); } while(ok3); key = cvWaitKey (10); } cvReleaseCapture (&capture1); cvReleaseCapture (&capture2); cvReleaseCapture (&capture3); void cvDestroyAllWindows(void); cvReleaseHaarClassifierCascade (&cascade); cvReleaseMemStorage (&storage); return 0; } int detectFaces (IplImage *img,int cameraId) { int i; printf ( "Cercando facce sulla camera %d\n", cameraId ); CvSeq *faces = cvHaarDetectObjects ( img, cascade, storage, 1.1, 3, 0, cvSize(40, 40)); for (i = 0; i < (faces ? faces->total :0 ); i++) { CvRect *r = (CvRect *) cvGetSeqElem (faces, i); cvRectangle (img, cvPoint (r->x, r->y), cvPoint (r->x + r->width, r->y + r->height), CV_RGB (255, 0, 0), 1, 8, 0 ); printf("Trovata faccia! \n"); } if(faces -> total!=0) return TRUE; else return FALSE; }
aaa