1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| void detect_and_draw( IplImage* img )
{
static CvMemStorage* storage = 0;
static CvHaarClassifierCascade* cascade = 0;
const char* cascade_name =
"haarcascade_frontalface_alt.xml";
int scale = 1;
IplImage* temp = cvCreateImage( cvSize(img->width/scale,img->height/scale), 8, 3 );
CvPoint pt1, pt2;
int i;
//cvPyrDown( img, temp, CV_GAUSSIAN_5x5 );
cvClearMemStorage( storage );
if( cascade )
{
CvSeq* faces = cvHaarDetectObjects( img, cascade, storage,
1.1, 2, CV_HAAR_DO_CANNY_PRUNING,
cvSize(40, 40) );
for( i = 0; i < (faces ? faces->total : 0); i++ )
{
CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
pt1.x = r->x*scale;
pt2.x = (r->x+r->width)*scale;
pt1.y = r->y*scale;
pt2.y = (r->y+r->height)*scale;
cvRectangle( img, pt1, pt2, CV_RGB(255,0,0), 3, 8, 0 );
}
}
cvShowImage( "Median", temp );
cvReleaseImage( &temp );
}
int Tr_video::fen_test(char* nomfichier, int temps)
{
cvDestroyAllWindows();
/* Variables */
IplImage *im, *imcp, *imcp2;
CvCapture *avi;
/* Ouverture de la video */
avi = cvCaptureFromAVI(nomfichier);
cvNamedWindow("Originale", CV_WINDOW_AUTOSIZE);
cvNamedWindow("Median", CV_WINDOW_AUTOSIZE);
int height = (int) cvGetCaptureProperty(avi, CV_CAP_PROP_FRAME_HEIGHT);
int width = (int) cvGetCaptureProperty(avi, CV_CAP_PROP_FRAME_WIDTH);
imcp = cvCreateImage(cvSize(width,height), IPL_DEPTH_8U, 3);
imcp2 = cvCreateImage(cvSize(width,height), IPL_DEPTH_8U, 3);
while(cvGrabFrame(avi))
{
im = cvRetrieveFrame(avi);
cvShowImage("Originale", im);
/* Traitement de limage */
detect_and_draw(im);
cvWaitKey(temps);
}
cvReleaseImage(&imcp);
cvReleaseImage(&imcp2);
cvDestroyAllWindows();
return 1;
} |
Partager