Как получить список веб-камер с помощью opencv?
Я использую OpenCV2.2 с видеовходом. Я хочу перейти на OpenCV2.3.1, где videoInput, по-видимому, был объединен с OpenCV2.3.
Моя проблема заключается в том, что не существует функции listdevices() для возврата всех доступных источников видео.
Кто-нибудь знает новый эквивалент?
Ответы
Ответ 1
Как вы сказали, видеоиндуст сливается в OpenCV с версии 2.3rc.
Глядя на соответствующий , видеоинтерфейс, похоже, находится в highgui, как указано в списке изменений OpenCV. Несмотря на то, что ваш OpenCV построен с включенным, это настраиваемый параметр в Cmake (параметр WITH_VIDEOINPUT
, а также требует, чтобы он был сборкой WIN32, см. здесь).
OpenCV вызывает listdevices внутренне как VI.listDevices()
в реализации CvCaptureCAM_DShow::open
, а класс videoInput - защищенный член CvCaptureCAM_DShow.
Вы можете получить доступ к функциям listdevices, используя
CvCapture* capture = cvCaptureFromCAM( CV_CAP_DSHOW );
capture->VI.listDevices();
Ответ 2
См. этот ответ StackOverflow. В настоящее время он не поддерживается OpenCV, потому что он является кросс-платформой, а перечисление камеры является очень специфичным для платформы (например, v4l2 перечисляет не так, как DirectShow). Но кто-то отправил запрос на повышение против версии 2.2 a назад.
Ответ 3
Я закодировал класс, который позволяет перечислять все устройства с помощью интерфейса и счетчиков DirectShow. Хотя он будет работать только в Windows, он позволит вам получить список "дружественных имен устройств" и идентификаторы, которые необходимо создать, например объект VideoCapture.
Код находится здесь:
https://github.com/studiosi/OpenCVDeviceEnumerator