Я использую каскадный классификатор Хаара, обученный из Набор данных автомобилей 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
Странно, но для меня ваш код работает нормально в обоих режимах. Я использую Visual Studio 2010 на Windows 7 32bit. Вот мой проект — https://www.dropbox.com/s/5kubn5tlu7k6ziy/opencvhw.rar, так что вы можете проверить исполняемые файлы (каталоги Release и Debug). Если вы используете Visual Studio и хотите построить его самостоятельно, вам придется изменить пути к библиотеке и включить каталоги для обоих режимов (путь к каталогам включения одинаков, путь к каталогам библиотеки отличается). (проект -> … свойства -> свойства конфигурации -> каталоги vc ++)
Вообще я бы рекомендовал очень внимательно проверить конфигурацию проекта. Очень легко сделать небольшую ошибку, которая может вызвать очень странное поведение. Иногда лучший вариант — настроить все заново с нуля.
В OpenCV есть очень странные ошибки — ничего нового 🙂 Например, я не могу использовать некоторые кодеки во время отладки — если я запускаю программу в режиме отладки, но без отладки все нормально, но если я пытаюсь отладить — каждый кадр читается из файла пусто (но его размер правильный).
Возможно, вы только что столкнулись с чем-то похожим. Попробуйте преобразовать изображение в другой формат (я думаю, что bmp — лучший выбор для тестирования — он всегда должен работать без каких-либо дополнительных библиотек).
Также обратите внимание, что вы загрузили файл jpg, поэтому мне пришлось переименовать и преобразовать его самостоятельно — возможно, во время преобразований что-то в этом файле изменилось, поэтому мы не проверяем ваш код на точно таких же файлах — загрузите файл png в Dropbox, чтобы я можете проверить это.
Видеть это сообщение:
Этот тип ошибки может быть вызван ссылкой на библиотеку отладки opencv в режиме выпуска.