我正在开发一个需要使用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及其对象。
有没有人知道我做错了什么?
答案 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,请检查路径。关注是
应该像C:\\Ceemple\\data\\haarcascades\\haarcascade_frontalface_alt.xml
。
(顺便说一句,我使用 Ceemple IDE)