2012-05-05 21 views
0

我是新來的。我目前一直在使用opencv做一些簡單的項目。我目前在opencv中的項目是人臉檢測。我有代碼如下所示:opencv人臉檢測;在哪裏放置'haarcascade_frontalface_alt.xml'?

#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。

任何人都可以幫我解決這個問題嗎?謝謝

回答

0

既然您正在使用此char * filename =「haarcascade_frontalface_alt.xml」;然後你需要把你的xml文件放在當前目錄中。如果它在其他目錄中,則搜索該文件夾,而不是像char * filename =「C://opencv//...haarcascade_frontalface_alt.xml」;

0

如果您使用Windows資源管理器中的圖標運行應用程序,請將XML文件放在其旁邊。

如果您從命令行終端運行,請將XML放入當前工作目錄。

0

更好地哈爾級聯文件放在下:

首先,把你的Haar_cascade.xml文件項目的解決方案文件夾下(VS環境項目文件夾)

步驟: 1.右鍵點擊解決方案文件。 2.單擊選項「配置屬性」 3.單擊調試。 4.正在調試。在命令參數的右側給出您的級聯xml的名稱。例如haar_cascade_frontalface.xml

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"); 
+0

請,就2014年了。 *停止*使用棄用的c-api。 – berak