前言
昨天在使用这款摄像头的时候出现了一个问题,我在Windows在调试的时候,输出帧率大概在40-50FPS(720P下),但是把它用到Jeston nano(一个arm的板子,装的是Ubuntu18.04系统)上帧率只有5FPS左右,画质默认1920*1280,经过半天的调试,解决过程如下。
问题关键词:
-
摄像头输出只有5FPS
-
yuv/yuy2 摄像头如何在opencv中输出mjpg格式图像
Notes:如果你只关心解决方式 请直接看 最终解决方式
问题解决过程
解决问题过程
出了问题一开始就百度嘛,但是找来找去没有找到趁手的解决方式;然后问题了店家客服,说了帧率只有5FPS,客服也是经验丰富,一看5FPS,就知道输出的是Yuy2格式的图像,不是Mjpg,但是没给解决方法,让自己去网上找办法;然后看了这位老哥的博文:https://blog.csdn.net/qq_38392644/article/details/85197264 ,这里按照他的方法,添加 cap.set(6,cv2.VideoWriter.fourcc('M','J','P','G'))
,但是不顶用…,最后自己试出来解决方案…
最终解决方式
解决方法就是:将原先的VideoCapture(0)
改为VideoCapture(-1)
附最终源代码:
import cv2
import time
capture = cv2.VideoCapture(-1)
while True:
start = time.time()
ret, frame = capture.read()
cv2.imshow("video", frame)
sp = frame.shape
print(sp)
key = cv2.waitKey(1)#这个必须写,否则会因为刷新的问题显示不上
#fps = capture.get(cv2.CAP_PROP_FPS)
#print(fps)
end = time.time()
print(1/(end-start))
cv2.destroyAllWindows()
yuv格式下(VideoCapture(0)):
调整过后(VideoCapture(-1)):
总结
总结如下:
- 摄像头输出的图像格式有三种:mjpg、yuv、h264
- YUV和RGB一样都是图像变化方式,Yuy2是YUV的一种;
- 在opencv中使用摄像头,可以通过调节VideoCapture的值设置不同的输出格式,比如我上面的方法就是0输出的是yuv格式,1920*1680下只有5FPS;-1输出的是mjpg格式,正常模式。
- 一般免驱摄像头可以输出图像为YUY2和MJPG
- YUY2和MJPG,前者是无压缩图像格式的视频,系统资源占用少(因为不用解码),不需要解码器,缺点是帧率稍慢(受限于USB分配的带宽),后者是相当于JPEG图像压缩格式,优点是帧率高(视频开启快,曝光快),缺点是影像有马赛克,并且需要解码器,会占用PC系统资源。