问题
I have two webcams attached to my laptop (one built in), both of which work. (If I use Cheese, a webcam thingy that comes with Ubuntu, it uses the external one). If I use
cap = cv.CreateCameraCapture(0)
or
cap = cv.CreateCameraCapture(-1)
I get my built in webcam. If I use
cap = cv.CreateCameraCapture(1)
It doesn't work and the object `cap' displays as:
<Capture (nil)>
Same with CaptureFromCAM. So I'd like to know what openCV is trying to do and why it doesn't seem to know about the second camera. There should be two devices available (there are /dev/videoN entries for both).
回答1:
This is a general problem of the OpenCV, as you can see below. It seems that only the builtin, or the first USB cam (only if you do not have a buildin cam) works in OpenCV:
How to use a camera with OpenCV
Cannot access usb webcam through OpenCV, Cygwin
OpenCV capture from USB not iSight (OSX)
Currently, there is no way to extract the number of cameras, as listed in this feature request:
https://code.ros.org/trac/opencv/ticket/935
回答2:
I have been able to work around this problem by iterating over the webcam indexes until reading that camera no longer returns anything:
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
This method returns a list of all indexes that return something when read; I'm sure it can be improved upon, but there are hardly ever more than a few webcams and this runs pretty quickly.
回答3:
I think you should try this:
import cv2
cap = cv2.VideoCapture(1)
while True:
_, frame = cap.read()
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
来源:https://stackoverflow.com/questions/8044539/listing-available-devices-in-python-opencv