2011-08-23 85 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 - 我使用的是教程的第二版