我正在尝试使用OpenCv 2.3进行人脸检测。 我试图在我的项目上加载“haarcascade_frontalface_alt_tree.xml”,我经常无法加载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
}
我相信我正在解决与this problem
相同的问题我曾尝试在cvLoad命令之前加载图像,但它没有帮助。
我正在使用OpenCV 2.3,我的配置就像在这个tutorial
中一样我正在使用这些库(我假设我的配置正确,文件存在并且可以使用Notepad ++打开)
#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")
答案 0 :(得分: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.xml
或haarcascade_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教程,该教程不适用于当前版本的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;
答案 1 :(得分:0)
这也发生在我身上,但最后我觉得我发现了问题。
OpenCV有两个不同的库* d.lib和* .lib,d表示调试。
问题是您需要在适当的模式下为您的环境设置适当的库(与我的情况相比)。
当你处于调试时,d.lib,当你处于释放状态时,是.lib。
同样在我的项目中,我需要在Release模式下运行它以使其工作:)
我的vs2009中的此设置可以在属性,链接器,输入,附加依赖项下找到。
祝你好运
答案 2 :(得分:0)
检查带有“haarcascade_frontalface_alt.xml”文件名的字符串是否正确。 我有这个问题,目录分离器没有被识别。我将'\'字符更改为'/'并且教程有效。 对于您的信息,我使用MacOS 10.8.3运行Parallels与Windows 7,Visual Studio 2012和opencv 2.44 - 我使用的是教程的第2版