Code:
#include <stdio.h>
#include <stdlib.h>
#include <cv.h>
#include <cvaux.h>
#include <highgui.h>
#include <math.h>
#define PI 3.1415926535898
double rads(double degs)
{
return (PI/180 * degs);
}
int main(int argc, char *argiv[])
{
if ( argc != 2 ) /* argc should be 2 for correct execution */
{
/* We print argv[0] assuming it is the program name */
printf( "usage: %s filename", argiv[0] );
}
else
{
// We assume argv[1] is a filename to open
FILE *file = fopen( argiv[1], "r" );
/* fopen returns 0, the NULL pointer, on failure */
if ( file == 0 )
{
printf( "Could not open file\n" );
}
}
//declaration block
char *block1_arg_Filename = argiv[1];
IplImage * block1_img_o1 = NULL;
IplImage * block2_img_i1 = NULL;
CvPoint block2_point_o1 = cvPoint(0,0);
CvRect block2_rect_o2 = cvRect( 0, 0, 1, 1);
IplImage * block2_img_o3 = NULL;
double block2_double_o4 = 0.0;
static CvMemStorage* block2_storage = 0;
static CvHaarClassifierCascade* block2_cascade = 0;
const char* block2_cascade_name = "/usr/share/harpia/images/haarcascade_frontalface_alt2.xml";
IplImage * block12_img_i1 = NULL;
IplImage * block12_img_o1 = NULL;
IplImage * block7_img_i1 = NULL;
IplImage * block7_img_o1 = NULL;
CvRect block7_rect_i2;
IplImage * block8_img_i1 = NULL;
IplImage * block8_img_o1 = NULL;
//execution block
//Weight: 1
block1_img_o1 = cvLoadImage(block1_arg_Filename,-1);
block2_img_i1 = cvCloneImage(block1_img_o1);// IMAGE conection
//Weight: 2
if(block2_img_i1){
double scale = 1.3;
block2_cascade = (CvHaarClassifierCascade*)cvLoad( block2_cascade_name, 0, 0, 0 );
IplImage* gray = cvCreateImage( cvSize(block2_img_i1->width,block2_img_i1->height), 8, 1 );
IplImage* small_img = cvCreateImage( cvSize( cvRound (block2_img_i1->width/scale), cvRound (block2_img_i1->height/scale)),8, 1 );
cvCvtColor( block2_img_i1, gray, CV_BGR2GRAY );
cvResize( gray, small_img, CV_INTER_LINEAR );
cvEqualizeHist( small_img, small_img );
if(!block2_img_o3)
block2_img_o3 = cvCloneImage(block2_img_i1);
cvCopy(block2_img_i1,block2_img_o3,0);
block2_storage = cvCreateMemStorage(0);
cvClearMemStorage( block2_storage );
block2_rect_o2 = cvRect( 0, 0, 1, 1);
CvSeq* faces = cvHaarDetectObjects( small_img, block2_cascade, block2_storage,1.1, 2.0, 0/*CV_HAAR_DO_CANNY_PRUNING*/,cvSize(30, 30) );
block2_double_o4 = faces->total;
if(faces)
{
int i;
for( i = 0; i < (faces ? faces->total : 0); i++ )
{
CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
if(r)
{
CvPoint center;
int radius;
center.x = cvRound((r->x + r->width*0.5)*scale);
center.y = cvRound((r->y + r->height*0.75)*scale);
radius = cvRound((r->width + r->height)*0.3*scale);
cvCircle( block2_img_o3, center, radius, cvScalarAll(0), 3, 8, 0 );
if(i == 0)
{
block2_point_o1 = center;
block2_rect_o2.x = (r->x)*scale;
block2_rect_o2.y = (r->y)*scale;
block2_rect_o2.width = (r->width)*scale;
block2_rect_o2.height = (r->height)*scale;
}
}
}
}
cvReleaseImage( &gray );
cvReleaseImage( &small_img );
}
block7_rect_i2 = block2_rect_o2;// RECT conection
block7_img_i1 = cvCloneImage(block2_img_o3);// IMAGE conection
block12_img_i1 = cvCloneImage(block2_img_o3);// IMAGE conection
//Weight: 3
block12_img_o1 = cvCloneImage(block12_img_i1);
if(block12_img_i1)
cvSaveImage("/home/user/Desktop/facedetect.png" ,block12_img_i1, 0);
//Weight: 5
if(block7_img_i1){
block7_rect_i2.x = MAX(0,block7_rect_i2.x);//Check whether point is negative
block7_rect_i2.y = MAX(0,block7_rect_i2.y);
block7_rect_i2.x = MIN(block7_img_i1->width-1,block7_rect_i2.x);//Check whether point is out of the image
block7_rect_i2.y = MIN(block7_img_i1->height-1,block7_rect_i2.y);
block7_rect_i2.width = MIN(block7_img_i1->width-block7_rect_i2.x,block7_rect_i2.width);//Check whether rect reaches out of the image
block7_rect_i2.height = MIN(block7_img_i1->height-block7_rect_i2.y,block7_rect_i2.height);
block7_img_o1 = cvCreateImage(cvSize(block7_rect_i2.width,block7_rect_i2.height), block7_img_i1->depth,block7_img_i1->nChannels);
cvSetImageROI(block7_img_i1,block7_rect_i2);
cvSaveImage("/home/user/Desktop/face2.png" ,block7_img_i1, 0);
cvCopyImage(block7_img_i1,block7_img_o1);
}
block8_img_i1 = cvCloneImage(block7_img_o1);// IMAGE conection
//Weight: 6
block8_img_o1 = cvCloneImage(block8_img_i1);
if(block8_img_i1)
cvSaveImage("/home/user/Desktop/face.png" ,block8_img_i1, 0);
//cvSaveImage("/home/user/Desktop/face2.png" ,block7_img_i1, 0);
cvNamedWindow("Control Window",CV_WINDOW_AUTOSIZE );
//deallocation block
cvReleaseImage(&block1_img_o1);
cvReleaseImage(&block2_img_o3);
cvReleaseImage(&block2_img_i1);
cvReleaseMemStorage(&block2_storage);
cvReleaseImage(&block12_img_o1);
cvReleaseImage(&block12_img_i1);
cvReleaseImage(&block7_img_o1);
cvReleaseImage(&block7_img_i1);
cvReleaseImage(&block8_img_o1);
cvReleaseImage(&block8_img_i1);
return 0;
} //closing main()
}