Простая команда OpenCV работает в режиме отладки, но не в режиме выпуска - PullRequest
12 голосов
/ 14 января 2012

Я пытаюсь загрузить обучающий xml-файл с помощью CascadeClassifier::load(), и он отлично работает в режиме отладки, но в режиме выпуска я получаю ошибку времени выполнения.

Я получаю ошибку:

Необработанное исключение в 0x000007feefbf4938 в Testing.exe: 0xC0000005: Место записи нарушения прав доступа 0x0000000000000027.

Мой код выглядит следующим образом:

CascadeClassifier c;
if (!c.load("C:/data/haarcascade_frontalface_alt.xml"))
{
    exit(1);
}

Код вылетает в строке загрузки. Почему это случилось?

Ответы [ 4 ]

8 голосов
/ 18 января 2012

убедитесь, что вы работаете с релиз-библиотеками openCV при работе в режиме релиза.У меня были подобные проблемы, когда я пытался загрузить файлы со смешанным выпуском и отладкой dll.

См. этот пост.

0 голосов
/ 17 января 2012

Я считаю, что ваша ошибка связана с «загрузкой» XML-файла и настройкой «рабочего каталога» в настройках вашего проекта.

Если вы заходите в окно «Свойства» своего проекта, убедитесь, что «Работает»Директория 'в опциях "Отладка" верна.Измените «Configuration» (между Debug и Release), и вы сможете сравнить.

Эта ошибка иногда возникает, когда вы пытаетесь прочитать файл, который не существует.Использование локальных путей, которые находятся в «неправильном» рабочем каталоге, обычно является причиной, когда он работает в одной конфигурации, а не в другой.

РЕДАКТИРОВАТЬ:

Существует ли этот файл и является ли он правильным XML?

0 голосов
/ 18 января 2012

Это довольно странно. Проверьте параметры для версии отладки и выпуска, убедитесь, что вы используете правильную версию библиотек.

Я попытался запустить код в моем проекте и отлично работает как в отладочной, так и в выпускной версии, с opencv 2.3.1

Попробуйте добавить эти строки кода в другой проект, с работающей версией релиза и там, где вы уже используете opencv. Если это работает, то проблема в настройках конфигурации.

0 голосов
/ 15 января 2012

Нет догадок, почему ваша строка load может вызвать нарушение прав доступа только для сборки выпуска.Итак, следующий шаг - снабдить ваши выпуски OpenCV выпуском журналов, или printfs, или чем-то, что вам подходит.Этот тип отладки работает в этом сценарии, поскольку у вас есть исходный код для OpenCV и возможность перекомпиляции с VS2010.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...