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

Как получить список веб-камер с помощью opencv?

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

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

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

4b9b3361

Ответ 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