Вывод списка доступных устройств в python-opencv - PullRequest
5 голосов
/ 08 ноября 2011

К моему ноутбуку подключены две веб-камеры (одна встроенная), обе из которых работают. (Если я использую Cheese, веб-камеру, которая поставляется с Ubuntu, она использует внешнюю). Если я использую

cap = cv.CreateCameraCapture(0)

или

cap = cv.CreateCameraCapture(-1)

У меня есть встроенная веб-камера. Если я использую

cap = cv.CreateCameraCapture(1)

Это не работает, и объект `cap 'отображается как:

<Capture (nil)>

То же самое с CaptureFromCAM. Поэтому я хотел бы знать, что пытается сделать openCV и почему он не знает о второй камере. Должно быть доступно два устройства (для обоих есть записи / dev / videoN).

Ответы [ 3 ]

8 голосов
/ 08 ноября 2011

Это общая проблема OpenCV, как вы можете видеть ниже.Похоже, что в OpenCV работает только встроенная или первая USB-камера (только если у вас нет встроенной камеры):

Как использовать камеру с OpenCV

Невозможно получить доступ к веб-камере USB через OpenCV, Cygwin

Захват OpenCV с USB не iSight (OSX)

В настоящее время нет способаИзвлеките количество камер, как указано в этом запросе:

https://code.ros.org/trac/opencv/ticket/935

3 голосов
/ 15 ноября 2018

Мне удалось обойти эту проблему, перебирая индексы веб-камеры до тех пор, пока чтение этой камеры больше не возвращает ничего:

index = 0
arr = []
while True:
    cap = cv2.VideoCapture(index)
    if not cap.read()[0]:
        break
    else:
        arr.append(index)
    cap.release()
    index += 1
return arr

Этот метод возвращает список всех индексов, которые возвращают что-либо при чтении;Я уверен, что это можно улучшить, но вряд ли когда-либо будет больше, чем несколько веб-камер, и это работает довольно быстро.

0 голосов
/ 18 июля 2018

Я думаю, вы должны попробовать это:

import cv2

cap = cv2.VideoCapture(1)

while True:
    _, frame = cap.read()
    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
...