В примере OpenCV facedetect не загружается каскадный классификатор xml - PullRequest
4 голосов
/ 16 ноября 2011

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

Во-первых, я хотел начать вмешиваться с примером facedetect.cpp, который включен в OpenCV.Я создал его без ошибок, но когда я пытаюсь его запустить, он не откроет xml-файл каскадного классификатора (функция 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 и его объектов.

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

Ответы [ 4 ]

6 голосов
/ 01 июня 2013

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

CascadeClassifier::load - не единственная функция, вызывающая такие проблемы, подробности см. В этой теме: Сбой OpenCV imread (имя файла) в режиме отладки при использовании библиотек релизов .

6 голосов
/ 23 января 2012

Укажите полный путь к XML-файлу

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

Это должно работать!

2 голосов
/ 28 февраля 2015

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

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

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

2 голосов
/ 10 октября 2013

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

...