opencv人脸检测;在哪里放置'haarcascade_frontalface_alt.xml'?

时间:2012-05-05 03:51:40

标签: opencv

我是新来的。我目前正在使用opencv做一些简单的项目。我目前在opencv上的项目是人脸检测。我有如下所述的代码:

#include <stdio.h>
#include "cv.h"
#include "highgui.h"

CvHaarClassifierCascade *cascade;
CvMemStorage            *storage;

void detectFaces( IplImage *img );

int main( int argc, char** argv )
{  
        CvCapture *capture;
IplImage  *frame;
int       key;
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;
}

void detectFaces( IplImage *img )
{
int i;

CvSeq *faces = cvHaarDetectObjects(
        img,
        cascade,
        storage,
        1.1,
        3,
        0 /*CV_HAAR_DO_CANNY_PRUNNING*/,
        cvSize( 40, 40 ) );

for( i = 0 ; i < ( faces ? faces->total : 0 ) ; i++ ) {
    CvRect *r = ( CvRect* )cvGetSeqElem( faces, i );
    cvRectangle( img,
                 cvPoint( r->x, r->y ),
                 cvPoint( r->x + r->width, r->y + r->height ),
                 CV_RGB( 255, 0, 0 ), 1, 8, 0 );
}

cvShowImage( "video", img );
}

我现在所困扰的是我应该在哪里放置xml文件?我当前的opencv2.1目录位于C:/OpenCV2.1。

任何人都可以帮我解决这个问题吗?感谢

4 个答案:

答案 0 :(得分:0)

如果您使用Windows资源管理器中的图标运行应用程序,请将XML文件放在其旁边。

如果从命令行终端运行,请将XML放入当前工作目录。

答案 1 :(得分:0)

因为你正在加载这个char * filename =“haarcascade_frontalface_alt.xml”;然后,您需要将xml文件放在当前目录中。如果它在其他目录中,则搜索该文件夹,如char * filename =“C://opencv//...haarcascade_frontalface_alt.xml”;

答案 2 :(得分:0)

最好将haar级联文件放在:

首先,将您的Haar_cascade.xml文件放在项目的解决方案文件夹下(VS环境项目文件夹)

<强>步骤: 1.右键单击解决方案文件。 2.单击选项“配置属性” 3.单击调试。 4.正在调试中。在命令参数下的右侧,给出了级联xml的名称。例如haar_cascade_frontalface.xml

答案 3 :(得分:0)

您可以使用 -

face_cascade.load("d:\\haarcascade_frontalface_alt.xml")

所以代码看起来像 -

/** @function main */
 int main( int argc, const char** argv )
 {
   CvCapture* capture;
   Mat frame;
   face_cascade.load("F:\\haarcascade_frontalface_alt.xml");
   eyes_cascade.load("F:\\haarcascade_eye_tree_eyeglasses.xml");