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.
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.