【问题标题】:OpenCV (CvHaarClassifierCascade*) cvLoad doesn't load, unable to load xml fileOpenCV (CvHaarClassifierCascade*) cvLoad 不加载,无法加载 xml 文件
【发布时间】:2011-11-01 18:00:07
【问题描述】:

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

【问题讨论】:

    标签: c++ opencv face-detection


    【解决方案1】:

    为了缩小问题范围,在致电cvLoad 之前,您应该检查文件是否存在。这是一种方法:

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

    您需要#include &lt;sys/stat.h&gt;


    在我的系统 (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;
    

    【讨论】:

    • 我希望 OP 评论您的哪些解决方案回答了他的问题。
    【解决方案2】:

    这也发生在我身上,但最后我想我找到了问题。

    OpenCV 有两个不同的库 *d.lib 和 *.lib,d 表示调试。

    问题是您需要以正确的模式为您的环境(在我的情况下)设置正确的库。

    调试时为 d.lib,发布时为 .lib。

    另外,在我的项目中,我需要在发布模式下运行它以使其工作:)

    我的 vs2009 中的这个设置可以在属性、链接器、输入、附加依赖项下找到。

    最好的问候

    【讨论】:

    • 你是如何使用这个库的?你能再解释一下吗?
    【解决方案3】:

    检查带有“haarcascade_frontalface_alt.xml”文件名的字符串是否正确。 我遇到了这个问题,目录分隔符没有被识别。我将 '\' 字符更改为 '/' 并且教程有效。 供您参考,我使用的是 MacOS 10.8.3,在 Windows 7、Visual Studio 2012 和 opencv 2.44 上运行 Parallels - 我使用的是教程的第 2 版

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      相关资源
      最近更新 更多