Showing posts with label Code in C. Show all posts
Showing posts with label Code in C. Show all posts

Wednesday, June 8, 2011

Face Detection and make ROI Code in C - opencv

#include "stdafx.h"
#ifndef _EiC
#include "cv.h"
#include "highgui.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#endif
#ifdef _EiC
#define WIN32
#endif

static CvMemStorage* storage = 0;
static CvHaarClassifierCascade* cascade = 0;
void detect_and_draw( IplImage* image, int );
const char* cascade_name ="haarcascade_frontalface_default.xml";
int main( int argc, char** argv )
{
CvCapture* capture = 0;
IplImage *frame, *frame_copy = 0;
int counter=0;
int optlen = strlen("--cascade= ");
const char* input_name;
cascade =(CvHaarClassifierCascade*)cvLoad( "haarcascade_frontalface_default.xml",0, 0, 0 );
if( !cascade )
{
fprintf( stderr, "ERROR: Could not load classifier cascade\n" );
return -1;
}
storage = cvCreateMemStorage( 0);
capture = cvCaptureFromCAM( 0 );
cvNamedWindow( "result", 1 );
if( capture )
{
for(;;)
{

if( !cvGrabFrame( capture ))
break;
frame = cvRetrieveFrame( capture );
if( !frame )
break;
if( !frame_copy )
frame_copy = cvCreateImage( cvSize(frame->width,frame->height),
IPL_DEPTH_8U, frame->nChannels );

if( frame->origin == IPL_ORIGIN_TL )
cvCopy( frame, frame_copy, 0 );
else
cvFlip( frame, frame_copy, 0 );
++counter;
cvSaveImage("F.jpg", frame_copy);
detect_and_draw( frame_copy,counter);

if( cvWaitKey( 10 ) >= 0 )
break;

}

cvReleaseImage( &frame_copy );
cvReleaseCapture( &capture );
}


return 0;
}

void detect_and_draw( IplImage* img, int counter)
{
int scale = 1;
IplImage* temp = cvCreateImage(
cvSize(img-> width/scale, img->height/ scale), 8, 3 );
CvPoint pt1, pt2;
IplImage* face = 0;
int i;
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;
int width = pt2.x-pt1.x;
pt1.y = r->y*scale;
pt2.y = (r->y+r->height) *scale;
int height = pt2.y-pt1.y;

cvRectangle( img, pt1, pt2, CV_RGB(255,0, 0), 1, 8, 0 );

if(counter==1)
{
cvSetImageROI(img, cvRect(pt1.x+1,pt1.y+1,width-1,height-1));
cvSaveImage("Roi.jpg",img);
cvResetImageROI(img);
}



}
}

cvShowImage( "result", img );
cvReleaseImage( &temp );
}

#ifdef _EiC
main(1,"facedetect. c");
#endif