c++ - OpenCV (CvHaarClassifierCascade*) cvLoad 不加载,无法加载 xml 文件

标签 c++ opencv face-detection

我正在尝试使用 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")

最佳答案

要缩小问题范围,请在调用 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我得到一个异常(exception):

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;

关于c++ - OpenCV (CvHaarClassifierCascade*) cvLoad 不加载,无法加载 xml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7158039/

相关文章:

android - 人脸检测安卓

c++ - 如何使用 STL 算法和仿函数按值删除 std::map 单元格?

c++ - 使用 CV_INTER_AREA 调整图像大小

c++ - Ubuntu非法指令opencv

iOS,人脸检测,检测远离人脸的位置

php - 面部识别/检测 PHP 或用于照片和视频库的软件

c++ - 阴影贴图,距离与深度比较?

c++ - 将成员函数指针传递到模板中

c++ - 在 Linux 中监控程序的内存使用情况

python - 使用颜色模型可视化光流