【问题标题】:OpenCV fails to capture from more than 8 webcams on LinuxOpenCV 无法从 Linux 上超过 8 个网络摄像头捕获
【发布时间】:2016-07-27 17:41:13
【问题描述】:

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

【问题讨论】:

  • 我认为 GPU 无法处理 8 个网络摄像头,尤其是在网络摄像头具有高分辨率的情况下。
  • 我的应用是实时追踪果蝇。跟踪器目前仅使用 CPU,并且在使用 8 个网络摄像头进行跟踪时仅占 i7-4930K 的 12%,每个摄像头为 320x240 像素和 7.5 fps。
  • 那我错了。我会想点别的
  • 我刚刚用topvmstat 更仔细地检查了CPU 负载,在12 个网络摄像头的实验中,得到的CPU 仅为7%(主要是用户;系统约为0.4%)。这适用于“实验模式”,其中跟踪器还显示帧和实时热图并写入 M-JPEG 电影。 8 个网络摄像头的 12% CPU 数量来自我几个月前写的一些 ppt;很高兴我又看了一遍。 :)
  • 我一个字都听不懂:D!!。能否请您简化一下,以便我理解您的意思

标签: python linux opencv limit webcam


【解决方案1】:

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

#define MAX_CAMERAS 8

只需更改 MAX_CAMERAS 值并重建 OpenCV 即可解决问题。要更改的文件是 modules/highgui/src/cap_libv4l.cpp (line 260) 用于 libv4l 构建,而 cap_v4l.cpp 用于 v4l 构建。 (例如,有关这两个构建选项的更多信息,请参见 answer。)对于 OpenCV 3.0,目录更改为 modules/videoio/src/。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 2013-06-03
    • 1970-01-01
    相关资源
    最近更新 更多