从网络摄像头获取帧的最快方法

时间:2013-02-10 13:59:24

标签: opencv webcam

我在使用C ++(Visual Studio)开发我的程序时遇到了一些问题 - 现在我正在努力连接多个网络摄像头(通过USB线连接),为每个网络创建单独的线程来捕获帧,和单独的帧处理图像。

我使用OpenCV来处理帧,但问题是我没有获得网络摄像头的可能性(它支持25 fps,我只得到18)是否有一些我可以用来获取帧的库,而不是处理它们OpenCV可以更快地捕获帧吗?

我正在研究一下,最流行的方法是使用directshow来获取帧和OpenCV来处理它们。

你同意吗?或者您有其他解决方案吗? 我不会被某些链接所冒犯:)

2 个答案:

答案 0 :(得分:5)

  1. 只有使用DirectShow才能使用 CV_CAP_DSHOW标志,如:

    VideoCapture capture( CV_CAP_DSHOW + 0 );  // 0,1,2, your cam id there
    

    (没有它,默认为vfw)

  2. 捕获已经在一个单独的线程中运行,因此用更多线程包装它不会给你带来任何好处。

  3. 多个凸轮的另一个障碍是usb带宽,所以如果你有背面的端口&机器的前部,不要将所有凸轮插入同一个端口/控制器,否则你只是将其饱和

答案 1 :(得分:3)

OpenCV使用DirectShow。直接使用DirectShow(Windows中的主要视频捕获API)显然可以获得相同或更好的性能(如果OpenCV设置为使用Video for Windows,则更可能如此)。 USB摄像头通常会达到USB带宽,因此帧速率限制,使用DirectShow以压缩格式捕获或采用较少位/像素的格式是在相同USB带宽限制内达到更高帧速率的方法。

导致低帧速率的另一个典型问题是延迟捕获的慢同步处理。您通常通过将简单的处理放入相同的捕获循环并且与启用处理的操作相比看到更高的FPS来识别这一点。