Example #1
0
/* Clean up */
static void
gst_face_detect_finalize (GObject * obj)
{
  GstFaceDetect *filter = GST_FACE_DETECT (obj);

  if (filter->cvGray)
    cvReleaseImage (&filter->cvGray);
  if (filter->cvStorage)
    cvReleaseMemStorage (&filter->cvStorage);

  g_free (filter->face_profile);
  g_free (filter->nose_profile);
  g_free (filter->mouth_profile);
  g_free (filter->eyes_profile);

  if (filter->cvFaceDetect)
    cvReleaseHaarClassifierCascade (&filter->cvFaceDetect);
  if (filter->cvNoseDetect)
    cvReleaseHaarClassifierCascade (&filter->cvNoseDetect);
  if (filter->cvMouthDetect)
    cvReleaseHaarClassifierCascade (&filter->cvMouthDetect);
  if (filter->cvEyesDetect)
    cvReleaseHaarClassifierCascade (&filter->cvEyesDetect);

  G_OBJECT_CLASS (gst_face_detect_parent_class)->finalize (obj);
}
Example #2
0
int main(int argc, char* argv[]) {

	CvHaarClassifierCascade *pCascadeFrontal = 0, *pCascadeProfile = 0;	
	CvMemStorage *pStorage = 0;	
	CvSeq *pFaceRectSeq;
	int i;

	IplImage *pInpImg = cvLoadImage("D:/²âÊÔ/test6.2/6.jpg", CV_LOAD_IMAGE_COLOR);
	pStorage = cvCreateMemStorage(0);

	pCascadeFrontal = (CvHaarClassifierCascade *) cvLoad ("D:/²âÊÔ/test6.2/haarcascade/haarcascade_frontalface_default.xml",0,0,0);
	pCascadeProfile = (CvHaarClassifierCascade *) cvLoad ("D:/²âÊÔ/test6.2/haarcascade/haarcascade_profileface.xml",0,0,0);

	if (!pInpImg || !pStorage || !pCascadeFrontal || !pCascadeProfile) {
		printf("L'initilisation a echoue");
		exit(-1);
	}

	cvNamedWindow("Fenetre de Haar", CV_WINDOW_NORMAL);
	cvShowImage("Fenetre de Haar", pInpImg);
	cvWaitKey(50);

	pFaceRectSeq = cvHaarDetectObjects
		(pInpImg, pCascadeFrontal, pStorage,1.1,3,CV_HAAR_DO_CANNY_PRUNING,cvSize(0, 0));	

	for (i=0 ; i < (pFaceRectSeq ? pFaceRectSeq->total : 0) ; i++) {
		CvRect* r = (CvRect*)cvGetSeqElem(pFaceRectSeq, i);
		CvPoint pt1 = { r->x, r->y };
		CvPoint pt2 = { r->x + r->width, r->y + r->height };
		cvRectangle(pInpImg, pt1, pt2, CV_RGB(0,255,0), 3, 4, 0);
		cvSetImageROI(pInpImg, *r);
		cvSmooth(pInpImg, pInpImg, CV_GAUSSIAN, 5, 3);
		cvResetImageROI(pInpImg);
	}
	cvShowImage("Fenetre de Haar", pInpImg);
	cvWaitKey(1);
	//²àÁ³
	pFaceRectSeq = cvHaarDetectObjects
		(pInpImg, pCascadeProfile, pStorage,
		1.4,3,CV_HAAR_DO_CANNY_PRUNING,cvSize(0, 0));

	for (i=0 ; i < (pFaceRectSeq ? pFaceRectSeq->total : 0) ; i++) {
		CvRect* r = (CvRect*)cvGetSeqElem(pFaceRectSeq, i);
		CvPoint pt1 = { r->x, r->y };
		CvPoint pt2 = { r->x + r->width, r->y + r->height };
		cvRectangle(pInpImg, pt1, pt2, CV_RGB(255,165,0), 3, 4, 0);
		cvSetImageROI(pInpImg, *r);
		cvSmooth(pInpImg, pInpImg, CV_GAUSSIAN, 5, 3);
		cvResetImageROI(pInpImg);
	}

	cvShowImage("Fenetre de Haar", pInpImg);
	cvWaitKey(0);
	cvDestroyWindow("Fenetre de Haar");

	cvReleaseImage(&pInpImg);
	if (pCascadeFrontal) cvReleaseHaarClassifierCascade(&pCascadeFrontal);
	if (pCascadeProfile) cvReleaseHaarClassifierCascade(&pCascadeProfile);
	if (pStorage) cvReleaseMemStorage(&pStorage);
}
int main(int argc, char **argv) {
    CvCapture *capture;
    IplImage  *frame;
    int       key;
    char      *filename = "usb.xml"; // Change to the name of classifier

    cascade = (CvHaarClassifierCascade *) cvLoad(filename, 0, 0, 0);
    storage = cvCreateMemStorage(0);
    capture = cvCaptureFromCAM(0);

    // Check
    // assert(cascade && storage && capture);

    cvNamedWindow("video", 1);

    while(1) {
        frame = cvQueryFrame(capture);
        detect(frame);
        key = cvWaitKey(50);
    }

    cvReleaseImage(&frame);
    cvReleaseCapture(&capture);
    cvDestroyWindow("video");
    cvReleaseHaarClassifierCascade(&cascade);
    cvReleaseMemStorage(&storage);

    return 0;
}
Example #4
0
DLLEXP void ReleaseAlign()
{
	delete []g_lefta;
	delete []g_righta;
	cvReleaseHaarClassifierCascade(&g_FDcascade);
	cvReleaseMemStorage(&g_FDstorage);
}
Example #5
0
vector<RECT> facedetect (string imagefilename, string classifierfilename)
{
    CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)cvLoad(classifierfilename.c_str());
    IplImage* image = cvLoadImage(imagefilename);
    CvMemStorage* storage = cvCreateMemStorage ( );
    vector<RECT> list;

    if( cascade && image && storage )
    {

        CvSeq* faces = cvHaarDetectObjects( img, cascade, storage, 1.1, 2, CV_HAAR_DO_CANNY_PRUNING, cvSize(40, 40) );

        for( int i = 0; i < (faces ? faces->total : 0); i++ )
        {

            CvRect* r = (CvRect*)cvGetSeqElem( faces, i );

            RECT rect ;
            rect.left = r->x;
            rect.right = r->x + r->width;
            rect.top = r->y;
            rect.bottom = r->y + r->height;

            list.push_back(rect);
        }

    }

    cvReleaseMemStorage(&storage);
    cvReleaseImage(&image);
    cvReleaseHaarClassifierCascade(&cascade);

    return 
}
Example #6
0
/***************************************************************************   
*   函数名称   
*   MatchPicture  
*   参数   
*       CString imgPath         -   图像的路径  
*       CString xmlPath         -   模板路径

*   返回值   
*         CPoint   -返回匹配区域的中心坐标,若检测不到则返回(0,0)
*   说明   
*         该函数进行图片区域识别 
***************************************************************************/ 
CPoint CMyImage::MatchPicture(CString imgPath,CString xmlPath)
{
	CPoint centerPoint;
	
	CvHaarClassifierCascade* cascade = 0;
	cascade = (CvHaarClassifierCascade*)cvLoad(xmlPath); //加载特征文件
	if( !cascade )
	{
		return CPoint(0,0);
	}

	IplImage* image = cvLoadImage( imgPath,1); //加载等待检测的图像
	if(image)
	{
		centerPoint = Detect_and_Draw(image,cascade,0);   //目标检测
		cvWaitKey(0);
		cvReleaseImage(&image);
	}
	else
	{
		return CPoint(0,0);
	}
	cvReleaseHaarClassifierCascade( &cascade);  //释放
	return centerPoint;
}
Example #7
0
// Release all of the memory used by face tracking.
JNIEXPORT
void
JNICALL
Java_org_siprop_opencv_OpenCV_releaseFaceDetection(JNIEnv* env,
												   jobject thiz) {
											
	m_facesFound = 0;
	m_faceCropArea.width = m_faceCropArea.height = 0;
	
	if (m_cascade) {
		cvReleaseHaarClassifierCascade(&m_cascade);
		m_cascade = 0;
	}
	
	if (m_sourceImage) {
		cvReleaseImage(&m_sourceImage);
		m_sourceImage = 0;
	}
	
	if (m_grayImage) {
		cvReleaseImage(&m_grayImage);
		m_grayImage = 0;
	}
	
	if (m_smallImage) {
		cvReleaseImage(&m_smallImage);
		m_smallImage = 0;
	}
	
	if (m_storage) {
		cvReleaseMemStorage(&m_storage);
		m_storage = 0;
	}
}
Example #8
0
void reinit_detection(char* cascade_location) {
	if (cascade)
    {
        cvReleaseHaarClassifierCascade(&cascade);
    }	
	cascade = (CvHaarClassifierCascade*)cvLoad( cascade_location, 0, 0, 0 );
}
Example #9
0
void addFace(char *filename,char *personName)
{
	IplImage* pInpImg=0;
	CvHaarClassifierCascade* pCascade=0;		//指向后面从文件中获取的分类器
	CvMemStorage* pStorage=0;					//存储检测到的人脸数据
	CvSeq* pFaceRectSeq;			
	pStorage=cvCreateMemStorage(0);				//创建默认大先64k的动态内存区域
	pCascade=(CvHaarClassifierCascade*)cvLoad("d:/tools/opencv/data/haarcascades/haarcascade_frontalface_alt2.xml");		//加载分类器
	cvLoadImage(filename);
	if (!pInpImg||!pStorage||!pCascade)
	{
		printf("initialization failed:%s\n",(!pInpImg)?"can't load image file":(!pCascade)?"can't load haar-cascade---make sure path is correct":"unable to allocate memory for data storage",argv[1]);
		return ;
	}
	//人脸检测
	pFaceRectSeq=cvHaarDetectObjects(pInpImg,pCascade,pStorage,
		1.2,2,CV_HAAR_DO_CANNY_PRUNING,cvSize(40,40));
	//将检测到的人脸以矩形框标出。
	IplImage *reuslt;
	displaydetection(pInpImg,pFaceRectSeq,filename,reuslt);




	cvReleaseImage(&pInpImg);
	cvReleaseHaarClassifierCascade(&pCascade);
	cvReleaseMemStorage(&pStorage);
}
Example #10
0
int main(int argc,char **argv)
{
    if(argc != 2)
    {
        printf("usage: %s <mode>\n0 - integrate webcam\n1 - external webcam\n",argv[0]);
        exit(-1);
    }
    else
    {
        int web=atoi(argv[1]);
        if(web >= 0 && web <= 1)
        {
            //Questo è il frame
            IplImage *frame,*ridotta;
            //Immagine dalla cam
            CvCapture *immagine;
            //Creo uno spazio di memoria
            CvMemStorage *spazio=cvCreateMemStorage(0);
            //Carico il file cascade -IMPORTANTE PER IL FUNZIONAMENTO DEL TRACKING- 
            CvHaarClassifierCascade *cascade = (CvHaarClassifierCascade*) cvLoad(FILE_FACCIA_1,spazio);
            //Prendo i dati dalla cam
            immagine = cvCaptureFromCAM(web);
            
            cvSetCaptureProperty(immagine,CV_CAP_PROP_FRAME_WIDTH,640);
            cvSetCaptureProperty(immagine,CV_CAP_PROP_FRAME_HEIGHT,480);

            //Salvo il frame
            frame = cvQueryFrame(immagine);
            //Creo la finestra
            cvNamedWindow(NOME_FINESTRA1,CV_WINDOW_AUTOSIZE);
            
            //Ciclo finchè ci sono frame
            while(frame)
            {   
                cvFlip(frame,frame,1);       
                frame = diminuisci(frame,50);
                //Rilevo il volto e i relativi dettagli
                rilevaVolto(frame,cascade,spazio);
                //Mostra l'immagine
                cvShowImage(NOME_FINESTRA1,frame);
                //Libero lo spazio
                cvClearMemStorage(spazio);
                //Prende un altro frame
                frame = cvQueryFrame(immagine);
                //Aspetta 10 ms per controllare se viene premuto il tasto q (per uscire)
                char c = cvWaitKey(15);
                if(c == 'q') break;
            }
            
            cvReleaseHaarClassifierCascade(&cascade);
            cvReleaseCapture(&immagine);
            cvReleaseImage(&frame);
            cvDestroyWindow(NOME_FINESTRA1);
        }
        else
            puts("webcam not found");
    }
    return 0;
}
VALUE
cvhaarclassifiercascade_free(void* ptr)
{
  if (ptr) {
    CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)ptr;
    cvReleaseHaarClassifierCascade(&cascade);
  }
}
Example #12
0
FaceBl0r::~FaceBl0r() {
    if(tracked_obj)
        destroy_tracked_object(tracked_obj);

    if(cascade) cvReleaseHaarClassifierCascade(&cascade);
    if(storage) cvReleaseMemStorage(&storage);
    
}
ImgProcessing::~ImgProcessing() {
	/** Free model **/
	if (model != 0)
		svm_free_and_destroy_model(&model);

	/** Free face detection classifier & storage **/
	cvReleaseMemStorage( &storage );
	cvReleaseHaarClassifierCascade( &cascade );
}
Example #14
0
static void
gst_face_blur_load_profile (GstFaceBlur * filter)
{
  if (filter->cvCascade)
    cvReleaseHaarClassifierCascade (&filter->cvCascade);
  filter->cvCascade =
      (CvHaarClassifierCascade *) cvLoad (filter->profile, 0, 0, 0);
  if (!filter->cvCascade)
    GST_WARNING ("Couldn't load Haar classifier cascade: %s.", filter->profile);
}
/*! \fn FaceDetectorPlugin::_loadHaarCascade(string sConfigPath)
 *  \param sConfigPath is path to xml Haar classifier cascade.
 */
void FaceDetectorPlugin::_loadHaarCascade(string sConfigPath)
{
    m_sHaarCascadePath = sConfigPath;
    if (m_cascade != NULL)
        cvReleaseHaarClassifierCascade(&m_cascade);
    
    m_cascade = (CvHaarClassifierCascade*)cvLoad(sConfigPath.c_str());
    if (m_cascade == NULL)
        throw invalid_argument((string("Couldn't load xml data: ") + sConfigPath + ".").c_str());
}
Example #16
0
void release_detection() {
	if (storage)
    {
        cvReleaseMemStorage(&storage);
    }
    if (cascade)
    {
        cvReleaseHaarClassifierCascade(&cascade);
    }
	//cvReleaseImage(&gray);
	//cvReleaseImage(&small_img);
}
Example #17
0
void release_detection_multiple() {
	if (storage)
    {
        cvReleaseMemStorage(&storage);
    }
    if (face_cascade)
    {
        cvReleaseHaarClassifierCascade(&face_cascade);
    }
	if (nose_cascade)
    {
        cvReleaseHaarClassifierCascade(&nose_cascade);
    }
	if (mouth_cascade)
    {
        cvReleaseHaarClassifierCascade(&mouth_cascade);
    }
	if (leye_cascade)
    {
        cvReleaseHaarClassifierCascade(&leye_cascade);
    }
	if (reye_cascade)
    {
        cvReleaseHaarClassifierCascade(&reye_cascade);
    }
	if (profile_face_cascade)
    {
        cvReleaseHaarClassifierCascade(&profile_face_cascade);
    }
	//if(gray) cvReleaseImage(&gray);
	//if(small_img) cvReleaseImage(&small_img);
}
Example #18
0
/*****************************************************************************
 * CloseFilter: clean up the filter
 *****************************************************************************/
static void CloseFilter( vlc_object_t *p_this )
{
    filter_t *p_filter = (filter_t*)p_this;
    filter_sys_t *p_sys = p_filter->p_sys;

    if( p_sys->p_cascade )
        cvReleaseHaarClassifierCascade( &p_sys->p_cascade );

    if( p_sys->p_storage )
        cvReleaseMemStorage( &p_sys->p_storage );

    free( p_sys->event_info.p_region );
    free( p_sys );

    var_Destroy( p_filter->p_libvlc, VIDEO_FILTER_EVENT_VARIABLE);
}
Example #19
0
ReturnType getCamComp::onDestroy() {


	   
        if(face_cascade) cvReleaseHaarClassifierCascade(&face_cascade);
		//if(eye_cascade) cvReleaseHaarClassifierCascade(&eye_cascade);

		  // clean up and release resources
        if(frame!=NULL) cvReleaseImage(&frame);

        if(pStorageface) cvReleaseMemStorage(&pStorageface);
        //if(pStorageeye) cvReleaseMemStorage(&pStorageeye);
	    if(capture!=NULL)cvReleaseCapture( &capture );
		

	return OPROS_SUCCESS; }
Example #20
0
void Process::setHaarFile(string file)
{
    wait();

    if ( file == "" )
        return;

    if (haarCascade) {
        cvReleaseHaarClassifierCascade(&haarCascade);
    }

    haarCascade = (CvHaarClassifierCascade *)cvLoad(file.c_str(), 0, 0, 0);
    if (!haarCascade)
        qDebug() << "Error open cascade file:" << QString(file.c_str());
    else
        qDebug() << "Open cascade file:" << QString(file.c_str());
}
int main( int argc, char** argv )
{
    IplImage* image;
    //Use the following line to use your image
    if((image = cvLoadImage( "u00001.png", 1 )) != 0 )
    {
    	CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)cvLoad("data/cascade.xml", 0, 0, 0);
        detect_and_draw_objects( image, cascade, 1 );
        cvNamedWindow( "test", 0 );
        cvShowImage( "test", image );
        cvWaitKey(0);
        cvReleaseHaarClassifierCascade( &cascade );
        cvReleaseImage( &image );
    }

    return 0;
}
Example #22
0
File: asef.c Project: rogerils/ASEF
void asef_destroy(AsefEyeLocator *asef){

	cvReleaseMemStorage( &asef->face_detection_buffer );
	cvReleaseHaarClassifierCascade( &asef->face_detection_classifier );

	cvReleaseMat(&asef->lfilter);
	cvReleaseMat(&asef->rfilter);
	cvReleaseMat(&asef->lfilter_dft);
	cvReleaseMat(&asef->rfilter_dft);
	cvReleaseMat(&asef->scaled_face_image_32fc1);
	cvReleaseMat(&asef->scaled_face_image_8uc1);
	cvReleaseMat(&asef->lcorr);
	cvReleaseMat(&asef->rcorr);
	cvReleaseMat(&asef->lroi);
	cvReleaseMat(&asef->rroi);
	cvReleaseMat(&asef->lut);
}
int main(void)
{
  double wsize = 320;
  double hsize = 240;

  cvNamedWindow("FaceDetection", CV_WINDOW_AUTOSIZE);

  CvCapture* capture = NULL;

  capture = cvCreateCameraCapture(0);
  cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_WIDTH,  wsize);
  cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_HEIGHT, hsize);

  IplImage* frame;
  CvHaarClassifierCascade* cvHCC = (CvHaarClassifierCascade*)cvLoad("/usr/share/opencv/haarcascades/haarcascade_frontalface_alt.xml");
  CvMemStorage* cvMStr = cvCreateMemStorage(0);
  CvSeq* face;

  while(1)
  {
    frame = cvQueryFrame(capture);
    if(!frame) break;

    face = cvHaarDetectObjects(frame, cvHCC, cvMStr);

    for (int i = 0; i < face->total; i++)
    {
      CvRect* faceRect = (CvRect*)cvGetSeqElem(face, i);
      cvRectangle(frame,
                  cvPoint(faceRect->x, faceRect->y),
                  cvPoint(faceRect->x + faceRect->width, faceRect->y + faceRect->height),
                  CV_RGB(255, 0 ,0),
                  2, CV_AA);
    }

    cvShowImage("FaceDetection", frame);

    if(cvWaitKey(33)==27) break;
  }

  cvReleaseMemStorage(&cvMStr);
  cvReleaseHaarClassifierCascade(&cvHCC);
  cvReleaseCapture( &capture );

  cvDestroyWindow("FaceDetection");
}
Example #24
0
/* Clean up */
static void
gst_face_blur_finalize (GObject * obj)
{
  GstFaceBlur *filter = GST_FACE_BLUR (obj);

  if (filter->cvGray)
    cvReleaseImage (&filter->cvGray);

  if (filter->cvStorage)
    cvReleaseMemStorage (&filter->cvStorage);

  if (filter->cvCascade)
    cvReleaseHaarClassifierCascade (&filter->cvCascade);

  g_free (filter->profile);

  G_OBJECT_CLASS (gst_face_blur_parent_class)->finalize (obj);
}
Example #25
0
int main( int argc, char** argv )
{
	CvCapture *capture;
	IplImage  *frame;
	int       key;
	
	//NamNguyen comment and add(2lines below)
	//char      *filename = "haarcascade_frontalface_alt.xml";	
	char filename[] = "haarcascade_frontalface_alt.xml";


	cascade = ( CvHaarClassifierCascade* )cvLoad( filename, 0, 0, 0 );
	storage = cvCreateMemStorage( 0 );
	capture = cvCaptureFromCAM( 0 );

	assert( cascade && storage && capture );

	cvNamedWindow( "video", 1 );

	while( key != 'q' ) {
		frame = cvQueryFrame( capture );

		if( !frame ) {
			fprintf( stderr, "Cannot query frame!\n" );
			break;
		}

		cvFlip( frame, frame, -1 );
		frame->origin = 0;

		detectFaces( frame );

		key = cvWaitKey( 10 );
	}

	cvReleaseCapture( &capture );
	cvDestroyWindow( "video" );
	cvReleaseHaarClassifierCascade( &cascade );
	cvReleaseMemStorage( &storage );

	return 0;
}
Example #26
0
void QOpenCvImageBox::setSubDetectionEnabled(bool value) {
    subDetectionEnabled=value;
    if (subDetectionEnabled) {
        // FD initialization
        detected_sub_objs_array=NULL;
        sub_objs_found=0;
        sub_objs_visible=0;
        sub_od_calc_time=0;

        sub_od_image_scale=DEFAULT_SUB_IMAGE_SIZE;

        sub_cascade = (CvHaarClassifierCascade*)cvLoad(sub_obj_cascade_name->toLatin1(), 0, 0, 0 );
        if(!sub_cascade)
        {
            printf("Could not open cascade classifier %s", cascade_name);
        }
    } else {
        cvReleaseHaarClassifierCascade(&sub_cascade);
    }
}
Example #27
0
static void
kms_face_detector_finalize (GObject * object)
{
    KmsFaceDetector *facedetector = KMS_FACE_DETECTOR (object);

    cvReleaseImageHeader (&facedetector->priv->cvImage);
    cvReleaseImage (&facedetector->priv->cvResizedImage);

    if (facedetector->priv->pStorageFace != NULL)
        cvClearMemStorage (facedetector->priv->pStorageFace);
    if (facedetector->priv->pFaceRectSeq != NULL)
        cvClearSeq (facedetector->priv->pFaceRectSeq);

    cvReleaseMemStorage (&facedetector->priv->pStorageFace);
    cvReleaseHaarClassifierCascade (&facedetector->priv->pCascadeFace);

    g_mutex_clear (&facedetector->priv->mutex);

    G_OBJECT_CLASS (kms_face_detector_parent_class)->finalize (object);
}
Example #28
0
void detectFace(
	IplImage* srcImg,					// 灰度图像
	CvSeq* objects,						// 输出参数:检测到人脸的矩形框
	CvMemStorage* storage,				// 存储矩形框的内存区域
	double scale_factor = 1.1,			// 搜索窗口的比例系数
	int min_neighbors = 3,				// 构成检测目标的相邻矩形的最小个数
	int flags = 0,						// 操作方式
	CvSize min_size = cvSize(20, 20)	// 检测窗口的最小尺寸
)
{
	// 程序用到的参数
	const char* cascadeName = "haarcascade_frontalface_alt2.xml"; // 级联分类器的xml文件名

	// 读取级联分类器xml文件
	CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)cvLoad(cascadeName, 0, 0, 0);
	if( !cascade ) { 
        fprintf( stderr, "ERROR: Could not load classifier cascade\n" ); 
		cvWaitKey(0);
		exit(-1);
    }

	// 直方图均衡
	//cvEqualizeHist(srcImg ,srcImg); 

	// 检测人脸
	cvClearMemStorage(storage); 
    objects = cvHaarDetectObjects(	
		srcImg, 
		cascade, 
		storage, 
		scale_factor, 
		min_neighbors, 
		flags, 				/*CV_HAAR_DO_CANNY_PRUNING*/
		min_size
	);
	objectsTemp = objects;	// 为了将objects的值传递回main函数

	// 释放cascade的内存
	cvReleaseHaarClassifierCascade(&cascade);

}
void ofxCvHaarFinder::setup(string haarFile) {
	if(cascade != NULL)
		cvReleaseHaarClassifierCascade(&cascade);

	this->haarFile = haarFile;

	haarFile = ofToDataPath(haarFile);
	cascade = (CvHaarClassifierCascade*) cvLoad(haarFile.c_str(), 0, 0, 0);

	#ifdef HAAR_HACK
		// http://thread.gmane.org/gmane.comp.lib.opencv/16540/focus=17400
		// http://www.openframeworks.cc/forum/viewtopic.php?f=10&t=1853&hilit=haar
		ofxCvGrayscaleImage hack;
		hack.allocate(8, 8);
		CvMemStorage* storage = cvCreateMemStorage();
		cvHaarDetectObjects(hack.getCvImage(), cascade, storage, scaleHaar, 2, CV_HAAR_DO_CANNY_PRUNING);
		cvReleaseMemStorage(&storage);
	#endif

	if (!cascade)
		printf("Could not load Haar cascade: %s\n", haarFile.c_str());
}
Example #30
0
face_detect_ctx::~face_detect_ctx()
{
	if(this->temp_storage) cvReleaseImage(&this->temp_storage);
	if(this->small_image) cvReleaseImage(&this->small_image);

	vector<CvRect *>::iterator it;
	
	if(this->face_vector->size() > 0)
	{
		for(it=this->face_vector->begin();it!=this->face_vector->end();) delete *it++;
		this->face_vector->erase(this->face_vector->begin(),this->face_vector->end());		
	}
	
	if(this->body_vector->size() > 0)
	{
		for(it=this->body_vector->begin();it!=this->body_vector->end();) delete *it++;
		this->body_vector->erase(this->body_vector->begin(),this->body_vector->end());		
	}
	delete this->face_vector;
	delete this->body_vector;
	cvReleaseHaarClassifierCascade( &this->cascade );
	this->faceconf=NULL;
}