首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV网络摄像头帧率

OpenCV网络摄像头帧率
EN

Stack Overflow用户
提问于 2012-06-08 18:08:33
回答 2查看 4.2K关注 0票数 4

我有一个网络摄像头,能够1080p 30fps,我已经确认使用VirtualDub预览和保存从网络摄像头本身的视频。

由于某些原因,OpenCV只给我大约4FPS,处理器没有最大限度地使用任何核心,所以我看不到为什么?(顺便说一句,这实际上并没有输出提要,只是获取帧)。

有OpenCV经验的人知道为什么吗?会不会是OpenCV没有使用DirectShow来读取摄像头(假设30fps/1080p需要DirectShow -我相信这就是virtualdub使用的)。OpenCV将图像读取到其专有数据类型Mat中的事实会成为瓶颈吗?

我的相机是,我的操作系统是装有Visual Studios2010的LifeCam 7。

有谁有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-08 18:12:55

30 FPS是通过捕获压缩视频(最有可能是JPEG)实现的。我可能碰巧OpenCV正在切换到捕获原始视频,例如RGB,在这种情况下,有效的FPS受到U盘带宽的限制。4 FPS大约是USB在1920x2080 24位RGB (25 MB/s)中可以推送的数据量。

解决方案是确保捕获格式( DirectShow术语中的媒体类型)是压缩视频,并在软件中进行解压后处理。

票数 2
EN

Stack Overflow用户

发布于 2015-01-02 04:48:25

正如罗曼指出的那样,大多数网络摄像头的默认模式是MJPEG压缩,以降低需要通过USB连接(可能还有USB集线器等)的数据速率。和/或最大化可用的帧速率/分辨率。

对于计算机视觉来说,这通常是不可取的,因为我们宁愿拥有较低的帧率,但没有压缩伪影。实际上,通常可以以与例如改变分辨率几乎相同的方式来改变流格式(例如,改变为未压缩的YUV)。这对你来说是否真的可行取决于

  • 硬件支持的模式,
  • 低级驱动程序支持的这些模式(通常是通用的USB视频类/ UVC驱动程序),
  • 后一种模式通过所涉及的各种框架(例如,video for Windows / DirectX / Video4Linux2等),以及
  • 最终在OpenCV中使用视频捕获后端支持的这些模式中的哪一个。

不幸的是,后者的答案是简单的none。OpenCV有18个(!)不同的捕获后端(针对不同的平台,例如手机、OS X、Windows和Linux,通常是针对不同版本的底层框架的几个捕获后端),虽然似乎有一个用于更改流格式的API 1,但似乎没有任何后端实现它。:-(

如果您或其他任何人想要解决此问题,您可能需要检查我打开的关于此问题的OpenCV问题:http://code.opencv.org/issues/3007

在我的案例中,我对一些罗技网络摄像头进行了调查,它们甚至具有Windows和Linux低级驱动程序公开的不同功能。在Linux下,我无意中使用了OpenCV的GStreamer后端,这意味着另一个层次的间接性-在底层,它总是归结为V4L (video for Linux)内核API。使用libv4l后端改进了一些事情,因为这具有默认为某些YUV流格式的良好属性(尽管可能处于较低的帧率,这在其他情况下可能是不可取的)。(甚至有用于直接访问v4l内核API或通过libv4l的different, diverging backends。)

1参见接口文档中的CV_CAP_PROP_FORMAT:http://opencv.willowgarage.com/documentation/cpp/reading_and_writing_images_and_video.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10946857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档