问题
笔者使用的是USB摄像头。
如果你使用的是CSI摄像头,vcgencmd get_camera
命令可能能够帮到你。希望读取高帧率可以看看CSDN-树莓派ARM64系统中如何设置opencv-python读取高清摄像头画面
如果你使用的是USB摄像头,vcgencmd get_camera
命令会出现supported=1 detected=0
的提示,这是正常的。同时,raspistill库不支持USB摄像头,不能使用该库也是正常的。
之前在树莓派上一直使用的30fps的低帧率摄像头,所以一直没有发现opencv不能设置摄像头的帧率和分辨率,一直跑的是320x240,30fps
最近更换了一个在640x480下180fps,在1280x720下90fps的摄像头才发现opencv怎么都不能更改摄像头的分辨率,并且就算是在默认的320x240分辨率下也只有30fps
解决过程
需要直接看解决方案请下拉,这里的内容如果不全看完可能会误导
1.用fswebcam拍照,尝试摄像头在树莓派上是否能切换到1280x720
安装:sudo apt-get install fswebcam
使用:fswebcam --no-banner -r 1280x720 -q img.jpg
发现能够保存下来一张1280x720分辨率的图片,说明摄像头调整分辨率没问题
fswebcam命令参数使用见 CSDN-树莓派使用摄像头——fswebcam
2.用luvcview显示摄像头画面
安装:sudo apt-get install luvcview
使用:luvcview -s 1280x720
可以看到分辨率显示正确,但是帧率只有7帧左右
另外,命令输出中显示设置格式为MJPG,设置分辨率为1280x720,设置帧率为90fps,没有问题
解决方案
偶然看见一篇文章说是视频读取格式导致帧率过低,尝试一下发现可以输出高帧率了。
大部分摄像头支持YUY2和MJPG两种格式,而使用YUY2格式时因为数据量较大,可能帧率会较低,所以需要切换成MJPG格式输出。
- 笔者在windows上使用opencv读取这个摄像头可以不需要修改视频格式就能到高帧率,猜测可能在windows上opencv默认读取MJPG格式,而在树莓派上opencv默认读取YUY2格式
opencv中的cap.set()
函数可以对摄像头进行设置,部分参数如下
值 | 参数 | 作用 |
---|---|---|
3 | CV_CAP_PROP_FRAME_WIDTH | 宽 |
4 | CV_CAP_PROP_FRAME_HEIGHT | 高 |
6 | CV_CAP_PROP_FOURCC | 4个字符表示的视频编码器格式 |
使用cap.set(6,cv2.VideoWriter.fourcc('M','J','P','G'))
函数即可将视频格式切换成MJPG格式,
修改后进行摄像设置的代码为:文章来源:https://www.toymoban.com/news/detail-448839.html
cap.set(6,cv2.VideoWriter.fourcc('M','J','P','G'))
cap.set(3,1280)
cap.set(4,720)
参考的两篇博客:
CSDN-Python opencv 调用摄像头时设置以MJPG等编码格式获取视频
CSDN-Python+Opencv读取高帧率USB摄像头问题文章来源地址https://www.toymoban.com/news/detail-448839.html
到了这里,关于【CV】树莓派+OpenCV-python解决摄像头分辨率及帧率过低无法调整问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!