OpenCV facedetect示例不会加载级联分类器xml

时间:2011-11-16 14:10:13

标签: c++ c image-processing opencv face-detection

我正在开发一个需要使用Haar级联分类器进行OpenCV对象检测的应用程序。 我在64位Windows机器上使用OpenCV 2.3.1和VS2010。 我自己编译并构建了OpenCV,并没有使用任何预编译的二进制文件。

首先,我想开始干预OpenCV中包含的示例facedetect.cpp。 我没有错误地构建它,但是当我试图运行时它不会打开级联分类器xml文件(CascadeClassifier.load()函数返回false)。我没有更改示例源代码中的任何内容。

我正在使用随OpenCV一起分发的xml文件,因此问题不在于xml文件。 我还确保应用程序可以使用简单的fopen访问和读取文件。

我相信(但不确定)问题似乎是级联分类器属于“旧”类型。 但在OpenCV文档中,特别暗示新的CascadeClassifier对象可以打开“旧”和“新”级联分类器。

这是一个链接:http://opencv.itseez.com/modules/objdetect/doc/cascade_classification.html#cascadeclassifier-load

我甚至尝试使用预编译的OpenCV2.2二进制文件,它与xml一起使用效果很好。然后我尝试编译2.2示例源代码,并再次无法加载xml。

我知道我可以尝试使用旧对象CvHaarClassifierCascade,但我更喜欢使用最新版本的OpenCV及其对象。

有没有人知道我做错了什么?

4 个答案:

答案 0 :(得分:6)

提供xml文件的完整路径

String face = "c:/data/xml/haarcascade_frontalface_alt.xml";

它应该有用!

答案 1 :(得分:6)

我有同样的情况。当我意识到我在Debug配置中链接发布库时,我解决了它。将opencv_231*.lib更改为opencv_*231d.lib已解决了问题。

CascadeClassifier::load不是导致此类麻烦的唯一函数,请参阅此主题以获取详细信息:OpenCV imread(filename) fails in debug mode when using release libraries

答案 2 :(得分:2)

我使用notepad ++来完成这项工作。我将所有相关的xml文件转换为ANSI,并删除了第一行<?xml version="1.0"?>,然后手工重写。

答案 3 :(得分:2)

如果您使用的是Windows,请检查路径。关注是

  1. 路径中的转义序列。
  2. 取决于操作系统的正向或反向斜杠。
  3. 应该像C:\\Ceemple\\data\\haarcascades\\haarcascade_frontalface_alt.xml。 (顺便说一句,我使用 Ceemple IDE)