OpenCV无法从Linux上的8个以上网络摄像头中捕获

Ulr*_*ern 2 python linux webcam opencv limit

OpenCV无法在Linux上为超过8个网络摄像头打开VideoCaptures.这是一个简单的例子:

# "opencap.py"
import cv2, sys
dev = int(sys.argv[1])
cap = cv2.VideoCapture(dev)
print "device %d: %s" %(dev, "success" if cap.isOpened() else "failure")
Run Code Online (Sandbox Code Playgroud)

对于我的设置(OpenCV 2.4.11,Ubuntu 14.04),例如9个网络摄像头,opencap.py成功进行了前8个网络摄像头(0-7),但对于最后一个我获得

> python opencap.py 8
HIGHGUI ERROR: V4L: index 8 is not correct!
device 8: failure
Run Code Online (Sandbox Code Playgroud)

注意:v4l2-ctl --list-devices正确列出9个网络摄像头(/ dev/video0,...,/ dev/video8).

Ulr*_*ern 6

问题是由OpenCV源代码中的这一行引起的:

#define MAX_CAMERAS 8
Run Code Online (Sandbox Code Playgroud)

只需更改MAX_CAMERAS值并重建OpenCV即可解决问题.要更改的文件是用于libv4l构建的modules/highgui/src/cap_libv4l.cpp(第260行),以及用于v4l构建的cap_v4l.cpp.(有关两个构建选项的更多信息,请参阅此答案.)对于OpenCV 3.0,目录更改为modules/videoio/src /.

注意:在达到8摄像头限制之前,通常会遇到网络摄像头的USB带宽问题.参见,例如,这个答案.