opencv 设置摄像头采集图像编码格式


问题:

新到的摄像头在windows下用opencv打开,设置分辨率为3840*2160,输出图像基本为实时。在linux下用opencv打开,同样分辨率。输出图像fps降到了1 。

原因:

视频输出格式为yuv时,帧率只有1。只有在输出格式为mjpg时,帧率才为实时。

为什么呢?
因为其中有一个瓶颈:
输出fps=30,yuv格式的4k视频,所需的数据传输速率为30 f/s * 3840*2160 Byte / 2 = 124416000 Byte/s = 118MB/s

而USB2.0的传输速率:

2000年制定的USB 2.0标准是真正的USB 2.0,被称为USB 2.0的高速(High-speed)版本,理论传输速度为480 Mbps,即60 MB/s,但实际传输速度一般不超过30 MB/s,采用这种标准的USB设备也比较多。

解决:

import cv2
cap = cv2.VideoCapture(0, cv2.CAP_V4L1)
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))

MJPG 格式是motion jpeg,也就是将视频的每一帧都按照jpg格式压缩了,数据量大大降低。然而还有一个问题是,不知道默认的图像质量是多少,可不可以设置。后面需要的时候再研究吧。。。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM