2011-08-23 70 views
0

我試圖使用OpenCv 2.3進行人臉檢測。 我試圖在我的項目中加載「haarcascade_frontalface_alt_tree.xml」,我經常無法加載xml文件。OpenCV(CvHaarClassifierCascade *)cvLoad不加載,無法加載xml文件

CvHaarClassifierCascade * pCascade = 0; // the face detector 
const char* file ="C:\OpenCV2.3\opencv\data\haarcascades\haarcascade_frontalface_alt_tree.xml" ; 
pCascade = (CvHaarClassifierCascade*) cvLoad(file , NULL, NULL, NULL); 
    if (!pCascade) { 
     exit(-1); // unable to load xml 
    } 

我相信我expeiancing同樣的問題this problem

我曾嘗試cvLoad命令之前加載的圖像,但它並沒有幫助。

我使用的OpenCV 2.3,使我的配置,就像在這個tutorial

我使用這些庫(我相信我的配置是正確的,該文件存在,可以用記事本打開++)

#include <stdio.h> 
#include "opencv2\opencv.hpp" 
#include "cv.h" 
#include "highgui.h" 
//#include "cvaux.h" 

using namespace cv; 


#pragma comment(lib, "opencv_core230d.lib") 
#pragma comment(lib, "opencv_highgui230d.lib") 
//#pragma comment(lib, "opencv_contrib230d.lib") 
//#pragma comment(lib, "opencv_calib3d230d.lib") 
//#pragma comment(lib, "opencv_features2d230d.lib") 
//#pragma comment(lib, "opencv_flann230d.lib") 
//#pragma comment(lib, "opencv_gpu230d.lib") 
#pragma comment(lib, "opencv_haartraining_engined.lib") 
#pragma comment(lib, "opencv_imgproc230d.lib") 
//#pragma comment(lib, "opencv_legacy230d.lib") 
//#pragma comment(lib, "opencv_ml230d.lib") 
//#pragma comment(lib, "opencv_objdetect230d.lib") 
//#pragma comment(lib, "opencv_video230d.lib") 

回答

3

爲了縮小問題範圍,在致電cvLoad之前,您應該檢查文件是否存在。這裏有一種方法:

struct stat buf; 
int statResult = stat(file,&buf); 
if (statResult || buf.st_ino < 0) { 
    cout << "File not found: " << file << endl; 
    exit(-2); 
} 

你需要#include <sys/stat.h>


在我的系統(OS X 10.6.8/OpenCV的2.3),當我試圖加載haarcascade_frontalface_alt_tree.xmlhaarcascade_frontalface_alt.xml我得到一個異常:

OpenCV Error: Unspecified error (The node does not represent a user object (unknown type?)) in cvRead, file /Users/steve/Development/opencv2/opencv/modules/core/src/persistence.cpp, line 4857 

我認爲你正在使用過期的OpenCV 1教程爲D沒有與當前版本的haarcascade_frontalface_alt_tree.xml一起工作。改爲嘗試this OpenCV 2 tutorial。這個代碼從這個教程適用於我:

CascadeClassifier face_cascade; 
if (!face_cascade.load(file)) { 
    cout << "Couldn't load face_cascade" << endl; 
    exit(-1); 
} 

cout << "Loaded face_cascade" << endl; 
+2

我希望OP會評論您的哪些解決方案回答了他的問題題。 – Joshua

0

它也發生在我身上,但最後我覺得我發現了這個問題。

OpenCV有兩個不同的庫* d.lib和* .lib d表示調試。

問題是你需要在適當的模式下爲你的環境設置適當的庫(在我的情況下)。

d.lib當你在調試時,和.lib當你在發佈。

而且在我的項目,我需要運行在發行模式,使其工作:)

這樣的設置在我的vs2009能在性能,連接器,輸入,附加依賴被發現。

問候

+0

你是如何使用圖書館的?你可以請進一步解釋一下嗎? –

0

檢查,與「haarcascade_frontalface_alt.xml」文件名字符串是正確的。 我有這個問題,目錄分隔符不被識別。我將'\'字符改爲'/',並且該教程起作用。 對於您的信息,我使用的MacOS 10.8.3在Windows 7,Visual Studio 2012和opencv 2.44上運行Parallels - 我使用的是教程的第二版