人脸检测

来源:互联网 发布:淘宝嘉年华价格变更 编辑:程序博客网 时间:2024/05/19 00:42

//在输入的彩色图像img中检测人脸,将最终结果(一个)返回到CvRect结构中

CvRect  OnFaceDetection(IplImage*img,CvHaarClassifierCascade*cascade)

{

         CvMemStorage*storage=cvCreateMemStorage(0);

         IplImage*gray=cvCreateImage(cvSize(img->width,img->height),8,1);

         cvCvtColor(img,gray,CV_BGR2GRAY);

         cvEqualizeHist(gray,gray);                   //灰度直方图均衡化                                                                   

         cvClearMemStorage(storage);

 

         CvRectrMax;                                     //真正的人脸区域                                                                              

         rMax.x=-1;

         rMax.y=-1;

         rMax.width=-1;

         rMax.height=-1;

 

         CvSeq*faces=cvHaarDetectObjects(gray,cascade,storage,1.1,2,0,cvSize(20,20));

         for(inti=0;i<(faces?faces->total:0);i++)                  //得到所有的人脸区域                                   

         {

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

                   if(rtemp->x>0.5*img->width)    //自定义人脸区域滤波规则,示例为右侧最大               

                   {

                            if(rtemp->width*rtemp->height>rMax.width*rMax.height)     

                            {

                                     rMax.x=rtemp->x;

                                     rMax.y=rtemp->y;

                                     rMax.width=rtemp->width;

                                     rMax.height=rtemp->height;

                            }

                   }

         }

 

         cvReleaseImage(&gray);

         cvReleaseMemStorage(&storage);

 returnrMax;                                                                                                                                                 

}

 

使用示例:

const char*cascade_name="haarcascade_frontalface_alt.xml";                     

CvHaarClassifierCascade*cascade=(CvHaarClassifierCascade*)cvLoad(cascade_name,0,0,0);        

CvRectrface=OnFaceDetection(srcRGB,cascade);                                                                                      

if (rface.x!=-1)  { ...... }



 

原创粉丝点击