OpenCV 无法从 Linux 上超过 8 个网络摄像头捕获

OpenCV fails to capture from more than 8 webcams on Linux

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")

对于我的设置(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

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

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

#define MAX_CAMERAS 8

只需更改 MAX_CAMERAS 值并重建 OpenCV 即可解决问题。要更改的文件是 modules/highgui/src/cap_libv4l.cpp(line 260) for a libv4l build, and cap_v4l.cpp for a v4l build. (See, e.g., this answer 更多关于两个构建选项。)对于 OpenCV 3.0,目录更改为 modules/videoio/src/.

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