[经验]解决使用opencv 高分辨率下的摄像头卡顿不流畅

目录

  • 发现
  • 分析
  • 解决
  • 总结

发现

环境

  • ubuntu 16.04
  • python 2.7 (anaconda 的环境)
  • cv 版本 3.4
  • 安装方式 pip install opencv-contrib-python

问题

最近在做一个项目,需要使用opencv 打开摄像头,然后录制视频,在默认的参数下,opencv打开摄像头都是非常流畅的,但是在高分辨率下,摄像头使用如下的代码的时候就非常的不流畅,而且很卡,比如如下的代码做演示就非常的卡

在代码中,我设定了视频的分辨率为1080p , 这个时候演示出来的视频画面就非常的卡,是摄像头本身就不支持吗?我看了自己的设备参数 ,标明设备是支持1080p的

分析

我打开ubuntu系统的自带camera cheese 工具,不论是录制,还是拍摄,都是1080p无卡顿现象,这就说明本身不是设备的问题,这个时候我在想,是否有参数可以设置FPS,尝试在代码中加入

将FPS设定在30帧,依然没有效果?难道是opencv的问题,尝试使用google 搜索关键字 opencv python set fps fake 得到答案

从答案里面得知,我们需要使用libv4l库,并且,在使用opencv 编译版本的时候,要开启这个feature ,很明显 ,当前我使用的opencv应该是直装版本,没有经过编译的,那知道问题在哪,我们进行尝试

解决

安装依赖项

下载opencv 源码

https://codeload.github.com/opencv/opencv/tar.gz/3.4.2 ,本次使用的3.4.2的版本

卸载之前的opencv

编译opencv

进入opencv 目录

验证

这次使用的是录制视频并输出视频的代码

录制了1分钟的视频,看了一下结果,还不错,非常流畅,成功解决这个问题

总结

这次我们主要从,发现问题,假设问题,搜索问题的几个角度 来成功解决我们在工程上的一些问题,突破点就是验证自己的想法,使用正常的关键字去寻找问题的答案,OK,这次的分享就到这里

参考文档:
在ubunt下安装opencv

点赞
  1. 王智敏说道:

    博主您好,很欣慰看到您对此问题做出解答。我在使用WIFI传送的摄像头时,cv2.VideoCapture出现了很大的延迟。我使用set时,具体使用方法是 cap.set(cv2.CAP_PROP_BUFFERSIZE, 3),希望可以使缓冲区变小点,这样在保持实时的基础上,掉帧也没关系,但现在set函数也不管用,又用test程序测了cv2.CAP_PROP_FPS,设为25fps,发现确实不管用,所以猜测可能和你遇到的问题一样,但是我是windows系统,重新编译OpenCV库比较麻烦,想问下,你重新编译之前(cv2.CAP_PROP_BUFFERSIZE确实也不管用吗?如果是的话,那确实是这个原因无疑了。
    希望可以得到博主的尽快回复,祝您身体健康,天天开开心心!

    1. bruce说道:

      你好,我之前的安装版本相当于是默认版本的,因为很多参数都没有正常的设置,导致设置fps失效,我猜想很大程度上你自己编译,并且安装相关的依赖可以解决你的问题,我推荐你按照官方的版本把这些东西和依赖都安装一下,然后再试试。

    2. bruce说道:

      另外,如果opencv你觉得编译麻烦的话,我推荐你使用ffmpeg ,这个也是满方便的工具,参数多而且功能强大

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据