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