Как получить список устройств веб-камеры, использующих opencv? - PullRequest
13 голосов
/ 14 февраля 2012

Я использую OpenCV2.2 с videoInput.Я хочу перейти на OpenCV2.3.1, где videoInput, по-видимому, был объединен с OpenCV2.3.

Моя проблема заключается в том, что не существует функции listdevices (), которая возвращает все доступные видеоисточники.

Кто-нибудь знает новый эквивалент?

Ответы [ 3 ]

10 голосов
/ 14 февраля 2012

Как вы сказали, видеовход был объединен с OpenCV с 2.3rc.

Глядя на соответствующий источник видеовход, похоже, в highgui, как указывает журнал изменений OpenCV.Несмотря на то, что ваш OpenCV собран с включенным, это настраиваемый параметр в Cmake (параметр WITH_VIDEOINPUT, а также требуется, чтобы он был сборкой WIN32, см. здесь ).

OpenCV вызывает список устройстввнутренне как VI.listDevices() в реализации CvCaptureCAM_DShow::open, а класс videoInput является защищенным членом CvCaptureCAM_DShow.

Вы можете получить доступ к функции listdevices, используя

 CvCapture* capture = cvCaptureFromCAM( CV_CAP_DSHOW );
 capture->VI.listDevices();
2 голосов
/ 14 февраля 2012

См. этот ответ StackOverflow. В настоящее время он не поддерживается OpenCV, потому что он кроссплатформенный, а перечисление камеры очень специфично для платформы (например, v4l2 перечисляет иначе, чем DirectShow). Но кто-то недавно отправил запрос на улучшение против версии 2.2.

1 голос
/ 16 января 2018

Я кодировал класс, который позволяет перечислять все устройства с помощью интерфейса DirectShow и перечислителей.Хотя он будет работать только в Windows, он позволит вам получить список «понятных имен устройств» и идентификаторы, которые вам нужно создать, например, объект VideoCapture.

Код здесь:

https://github.com/studiosi/OpenCVDeviceEnumerator

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...