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;
}