OpenCV (CvHaarClassifierCascade*) cvLoad 不加载,无法加载 xml 文件
OpenCV (CvHaarClassifierCascade*) cvLoad doesn't load, unable to load xml file
我正在尝试使用OpenCv 2.3进行人脸检测。我试图加载"haarcascade_frontalface_alt_tree.xml"在我的项目中,我总是无法加载xml文件。
CvHaarClassifierCascade * pCascade = 0; // the face detector
const char* file ="C:OpenCV2.3opencvdatahaarcascadeshaarcascade_frontalface_alt_tree.xml" ;
pCascade = (CvHaarClassifierCascade*) cvLoad(file , NULL, NULL, NULL);
if (!pCascade) {
exit(-1); // unable to load xml
}
我相信我遇到了和这个问题一样的问题。
我已经尝试在cvLoad命令之前加载图像,但它没有帮助。
我使用的是OpenCV 2.3,我的配置就像在本教程。
我正在使用这些库(我假设我的配置是正确的,文件存在并且可以使用notepad++打开)。
#include <stdio.h>
#include "opencv2opencv.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")
为了缩小问题范围,在调用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
不兼容。试试这个OpenCV 2教程。这个教程中的代码对我很有用:
CascadeClassifier face_cascade;
if (!face_cascade.load( file) ) {
cout << "Couldn't load face_cascade" << endl;
exit(-1);
}
cout << "Loaded face_cascade" << endl;
这种情况也发生在我身上,但最后我想我找到了问题所在。
OpenCV有两个不同的库*d。Lib和*。Lib中的d表示调试。
问题是你需要在适当的模式下为你的环境(而不是我的情况)设置适当的库。
d。
在调试时使用. Lib,在发布时使用. Lib。也在我的项目中,我需要在发布模式下运行它,使其工作:)
这个设置在我的vs2009中可以在属性,链接器,输入,附加依赖项下找到。
检查文件名为"haarcascade_frontalface_alt.xml"的字符串是否正确。我遇到了这个问题,目录分隔符没有被识别。我将""字符更改为"/",教程就成功了。为了你的信息,我使用MacOS 10.8.3运行Parallels与Windows 7, Visual Studio 2012和opencv 2.44 -我使用的是教程的版本2
- 如何使用tinyxml2从XML加载父实体和子实体
- 将Harrcascade加载到CascadeClalsifier时,XML解析错误
- 如何在编译时间加载XML
- 如何在Microsoft Visual Studio中加载.xml文件
- 如何从“std::istream”加载XML文档
- 无法在 c++ 中在安卓上加载和解析 xml 文件
- 使用微小的xml保存和加载文件
- 使用 xerces dom parser 加载部分 xml
- 无法使用MSXML6加载带有UTF-8 BOM标记的XML文件
- 正在将具有多个值的XML属性加载到不同的表单元格中
- 使用GetOpenFileName检索xml文件名后,tinyxml加载失败
- 如何在openCV 2.3.1中加载xml级联文件
- 如何本地加载XML语言环境文件
- 多次加载属性树xml解析器异常
- 如何在ACE中加载XML
- OpenCV (CvHaarClassifierCascade*) cvLoad 不加载,无法加载 xml 文件
- 可编程创建的tinyxml xml文件在Internet Explorer中无法加载
- 批量生成用于加载 XSD 文件的示例 xml
- 没有值的Xml加载
- 在vc++中加载XML值并将其传递为字符串