2011-11-16 1 views
4

Я работаю над приложением, которое требует обнаружения объекта OpenCV с использованием каскадного классификатора Хаара. Я использую OpenCV 2.3.1 с VS2010 на 64-битной Windows-машине. Я скомпилировал и создал OpenCV самостоятельно и не использовал никаких предварительно скомпилированных двоичных файлов.OpenCV сталкивается пример не будет загружать каскадный классификатор xml

Во-первых, я хотел начать вмешаться с примером сталкиваются.tp.pp, который включен в OpenCV. Я построил его без ошибок, но когда я пытаюсь запустить его, он не откроет XML-файл cascade classifier (функция CascadeClassifier.load() возвращает false). Я ничего не менял из исходного кода.

Я использую XML-файл, который распространяется вместе с OpenCV, поэтому проблема не в файле xml. Я также убедился, что приложение может получить доступ и прочитать файл, используя простой fopen.

Я считаю (но не уверен), что проблема заключается в том, что каскадный классификатор имеет «старый» тип. Но в документации OpenCV специально подразумевается, что новый объект CascadeClassifier может открывать как «старые», так и «новые» каскадные классификаторы.

Вот ссылка: http://opencv.itseez.com/modules/objdetect/doc/cascade_classification.html#cascadeclassifier-load

Я даже попытался использовать предварительно скомпилированных OpenCV2.2 двоичную и он работает отлично с этим XML. И затем я попытался скомпилировать исходный код примера 2.2, и снова он не смог загрузить xml.

Я знаю, что могу попробовать использовать старый объект CvHaarClassifierCascade, но я предпочитаю использовать последнюю версию OpenCV и ее объектов.

Кто-нибудь знает, что я делаю неправильно?

ответ

5

Дайте полный путь к XML-файла

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

Он должен работать!

6

У меня была такая же ситуация. Я решил это, когда понял, что я связываю выпуски libs в конфигурации Debug. Изменение opencv_231*.lib на opencv_*231d.lib решило проблему.

CascadeClassifier::load не является единственной функцией, вызывающей такие проблемы, см. Эту тему: OpenCV imread(filename) fails in debug mode when using release libraries.

+0

Это сработало для меня – Srinivas

2

Я получил эту работу, используя блокнот ++. Я преобразовал все соответствующие файлы xml в ANSI, а также удалил первую строку <?xml version="1.0"?>, а затем переписал ее вручную.

2

Если вы используете окна, проверьте путь. Концерн

  1. escape-последовательность на пути.
  2. передняя или обратная косая черта в зависимости от операционной системы.

Это должно быть как C:\\Ceemple\\data\\haarcascades\\haarcascade_frontalface_alt.xml. (кстати, я использую Ceemple IDE)