Если от веб-камеры приходят только черные кадры, но сама вебка работает отменно, то ставьте версию OpenCV 1.1, при этом не забудьте изменить все пути в проекте и дописать путь к директории bin OpenCV в системной переменной PATH, после чего перезапустите Visual Studio.
Вариант номер два: читаем мануал о том как пересобрать OpenCV. Из-за того, что библиотека была собрана неизвестно кем, как, где и т.д и т.п. она может не работать конкретно на вашем компьютере, для этого ее необходимо пересобрать. После сборки необходимо либо перезаписать lib- и dll-файлы либо прописать правильные пути в настройках проекта и системной переменной PATH.
Хочется добавить, что лично у меня заработала только пересобранная debug-версия. Кроме того, пересборка библиотеки позволит избежать вылета приложения при выполнении некоторых функций, например, функция может вылететь с ошибкой "Unhandled exception at 0xC0000005 Access violation reading location".
В первую очередь проблема "черного квадрата" вызвана изменениями в библиотеке videoInput, которая поставляется в комплекте с opencv. Версия 1991 работает нормально, 1995 - возвращает черный квадрат вместо кадра.
Вывод: скачайте videoInput версии 1991, замените файл videoInput.lib в openCV, пересоберите OpenCV
OpenCV версия 2.2
Разработчики с какой то радости решили отключить поддержку Direct Show, как мне показалось, дурацким способом: если уж решили убрать эту фичу следовало бы убрать весь соответствующий код, вместо этого в файле precomp.hpp просто убрали строку #define HAVE_VIDEOINPUT 1. Но на этом проблемы еще не заканчиваются.
VideoInput версия 1995
Особенностью этой версии является то что уменьшили код функции запуска вебкамеры и добавили небольшой кусочек кода для "ускорения захвата кадров", вот именно этот кусочек вызывает проблемы при работе со встроенной камерой
Выводы
- Скачать исходники video input (1995)
- Открыть файл videoInput.cpp
- Удалить участок кода, начинающегося с коментария:
//EXP - lets try setting the sync source to null - and make it run as fast as possible
- Пересобрать video input
- Скачать исходники openCV (2.2)
- Открыть файл precomp.hpp
- Добавить строку
#define HAVE_VIDEOINPUT 1
в пределах участка
#if defined WIN32 || defined _WIN32
например так:
#if defined WIN32 || defined _WIN32
#define HAVE_VIDEOINPUT 1
#endif
- Заменить файл videoInput.lib
- Пересобрать openCV
|