我在C++(Visual Studio)中开发我的一个程序时遇到了一些问题 - 现在我正在努力连接多个网络摄像头(通过usb电缆连接),为每个摄像头创建单独的线程来捕获帧,并分离帧用于处理图像.
我使用OpenCV来处理帧,但问题是我没有达到摄像头可能性的峰值(它支持25 fps,我只得到18)是否有一些我可以用来获取帧的库,而不是用OpenCV来处理它们制作的帧速度更快?
我正在研究一下,最流行的方法是使用directshow来获取帧和OpenCV来处理它们.
你同意吗?或者您有其他解决方案吗?我不会被一些链接冒犯:)
如果使用CV_CAP_DSHOW标志打开捕获,则仅使用DirectShow,如:
VideoCapture capture( CV_CAP_DSHOW + 0 ); // 0,1,2, your cam id there
Run Code Online (Sandbox Code Playgroud)
(没有它,默认为vfw)
捕获已经在一个单独的线程中运行,因此用更多线程包装它将不会给你带来任何好处.
多个凸轮的另一个障碍是usb带宽,所以如果你的机器背面和前面都有端口,请不要将所有凸轮插入同一个端口/控制器,否则你只需将其饱和
OpenCV 使用 DirectShow。直接使用 DirectShow(Windows 中的主要视频捕获 API)显然会给您带来同等或更好的性能(如果 OpenCV 设置为使用 Windows 视频,则更有可能)。USB 摄像头通常会达到 USB 带宽,因此帧速率受到限制,使用 DirectShow 以压缩格式或位数/像素较少的格式进行捕获是在相同 USB 带宽限制内达到更高帧速率的方法。
导致低帧速率的另一个典型问题是同步处理速度慢,导致捕获延迟。您通常可以通过将琐碎的处理放入相同的捕获循环中并看到与启用处理的操作相比更高的 FPS 来识别这一点。
| 归档时间: |
|
| 查看次数: |
6935 次 |
| 最近记录: |