4

我正在开发一个需要使用 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

4 回答 4

6

我也有同样的情况。当我意识到我在调试配置中链接发布库时,我解决了这个问题。更改opencv_231*.libopencv_*231d.lib已解决问题。

CascadeClassifier::load不是唯一导致此类麻烦的函数,有关详细信息,请参阅此线程:OpenCV imread(filename) failed in debug mode when using release libraries

于 2013-05-31T20:23:52.100 回答
6

给出xml文件的完整路径

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

它应该工作!

于 2012-01-23T13:27:35.643 回答
2

我通过使用记事本++得到了这个工作。我将所有相关的 xml 文件转换为 ANSI,还删除了第一行<?xml version="1.0"?>,然后手动重写。

于 2013-10-10T17:24:27.403 回答
2

如果您使用的是 Windows,请检查路径。担心的是

  1. 路径中的转义序列。
  2. 正斜杠或反斜杠取决于操作系统。

应该是这样的C:\\Ceemple\\data\\haarcascades\\haarcascade_frontalface_alt.xml。(顺便说一下,我使用的是Ceemple IDE)

于 2015-02-28T06:20:53.923 回答