这是一个有关cvLoad应用的列子,通过修改cvLoad的参数不仅可以用于时时检测人脸,眼睛等,像OpenCV3.1版本中HaarFaceDetect列子,下一步要探究一下如何更准确的分析人脸,
#include <stdio.h>
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
int main( int argc, char** argv )
{
//声明IplImage指针
// IplImage* pFrame = NULL;
IplImage* m_IplImage = NULL;
CvSeq* faces=NULL;
CvHaarClassifierCascade* cascade=NULL;
CvMemStorage* storage =NULL;
CvPoint pt1;
CvPoint pt2;
CvRect* r=NULL;
CvCapture* pCapture = NULL;
int nFrmNum = 0;
int i;
cvNamedWindow("faces",1);
cvMoveWindow("faces", 120, 0);
if( argc > 2 )
{
fprintf(stderr, "Usage: bkgrd [video_file_name]/n");
return -1;
}
if (argc ==1)
if( !(pCapture = cvCaptureFromCAM(-1)))
{
fprintf(stderr, "Can not open camera./n");
return -2;
}
if(argc == 2)
if( !(pCapture = cvCaptureFromFile(argv[1])))
{
fprintf(stderr, "Can not open video file %s/n", argv[1]);
return -2;
}
while(m_IplImage = cvQueryFrame( pCapture ))
{
nFrmNum++;
if(nFrmNum == 1)
{
storage = cvCreateMemStorage(0);
cascade = (CvHaarClassifierCascade*)cvLoad("E://Program Files//OpenCV//data//haarcascades//LEye.xml",storage,NULL,NULL);
}
else
{
faces = cvHaarDetectObjects(m_IplImage,cascade,storage,1.2,2,CV_HAAR_DO_CANNY_PRUNING,cvSize(0,0));
for(i=0;i<(faces?faces->total:0);i++)
{
r = (CvRect*)cvGetSeqElem(faces,i);
pt1.x=r->x;
pt1.y=r->y;
pt2.x=r->x + r->width;
pt2.y=r->y + r->height;
cvRectangle(m_IplImage,pt1,pt2,CV_RGB(255,0,0),3,8,0);
}
cvShowImage("faces",m_IplImage);
if( cvWaitKey(2) >= 0 )
break;
}
}
cvDestroyWindow("faces");
cvReleaseImage(&m_IplImage);
cvReleaseHaarClassifierCascade(&cascade);
cvReleaseMemStorage(&storage);
return 0;
}