Различные результаты с каскадом Хаара в режиме выпуска / отладки

Я использую каскадный классификатор Хаара, обученный из Набор данных автомобилей MIT обнаруживать транспортные средства в OpenCV (обучены с использованием утилит, поставляемых с OpenCV). Это работает достаточно хорошо при компиляции в режиме отладки, но при компиляции в режиме выпуска каскад вообще не обнаруживает никаких ошибок. Выполнение следующего кода на тестовом изображении ниже дает обнаружение в режиме отладки, но ничего в режиме выпуска (это поведение продолжается для всех изображений в моей последовательности данных).

Можете ли вы предложить, почему это происходит, и, что более важно, что я могу сделать, чтобы получить обнаружения при работе в режиме выпуска?

Каскадный файл

Код

cv::Mat testImage = cv::imread("testImage.png",0);
cv::equalizeHist(testImage, testImage);

cv::CascadeClassifier vehicleCascade;
vehicleCascade.load("cars3.xml");

// Detect vehicles
std::vector<cv::Rect> cars;
vehicleCascade.detectMultiScale(
testImage,                  // Input image
cars,                   // Output bounding boxes
1.1,                    // scale factor - how much image size is reduced at each scale
5,                      // min neighbours - how many neighbours required to maintain rect
0|CV_HAAR_SCALE_IMAGE,  // Not used
cv::Size(30,30),        // Min poss object size
cv::Size()              // Max poss object size
);

std::cout << "Found " << cars.size() << " objects.\n";

for (int i=0; i<cars.size(); ++i)
cv::rectangle(testImage, cars.at(i), CV_RGB(255,0,0), 3);

cv::namedWindow("Haar cascade");
cv::imshow("Haar cascade", testImage);
cv::waitKey(0);
cv::imwrite("output.png", testImage);

TestImage

testImage

13

Решение

  1. Странно, но для меня ваш код работает нормально в обоих режимах. Я использую Visual Studio 2010 на Windows 7 32bit. Вот мой проект — https://www.dropbox.com/s/5kubn5tlu7k6ziy/opencvhw.rar, так что вы можете проверить исполняемые файлы (каталоги Release и Debug). Если вы используете Visual Studio и хотите построить его самостоятельно, вам придется изменить пути к библиотеке и включить каталоги для обоих режимов (путь к каталогам включения одинаков, путь к каталогам библиотеки отличается). (проект -> … свойства -> свойства конфигурации -> каталоги vc ++)

  2. Вообще я бы рекомендовал очень внимательно проверить конфигурацию проекта. Очень легко сделать небольшую ошибку, которая может вызвать очень странное поведение. Иногда лучший вариант — настроить все заново с нуля.

  3. В OpenCV есть очень странные ошибки — ничего нового 🙂 Например, я не могу использовать некоторые кодеки во время отладки — если я запускаю программу в режиме отладки, но без отладки все нормально, но если я пытаюсь отладить — каждый кадр читается из файла пусто (но его размер правильный).
    Возможно, вы только что столкнулись с чем-то похожим. Попробуйте преобразовать изображение в другой формат (я думаю, что bmp — лучший выбор для тестирования — он всегда должен работать без каких-либо дополнительных библиотек).

  4. Также обратите внимание, что вы загрузили файл jpg, поэтому мне пришлось переименовать и преобразовать его самостоятельно — возможно, во время преобразований что-то в этом файле изменилось, поэтому мы не проверяем ваш код на точно таких же файлах — загрузите файл png в Dropbox, чтобы я можете проверить это.

3

Другие решения

Видеть это сообщение:
Этот тип ошибки может быть вызван ссылкой на библиотеку отладки opencv в режиме выпуска.

2

По вопросам рекламы [email protected]