Подтвердить что ты не робот

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

Я использую каскадный классификатор Хаара, обученный из набор данных автомобилей 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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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