opencv视频流默认分辨率及保存视频打不开的问题

问题描述:

这几天博主在做DMS(驾驶员监控)的过程中,使用opencv采集数据时,遇到的两个问题,记录下来供大家参考

视频流默认分辨率问题

保存视频的代码如下:


import cv2
capture = cv2.VideoCapture(0)
while True:
    ret, frame = capture.read()
    print(frame.shape) # 输出为(480, 640, 3)    
    frame = cv2.flip(frame,1)
    cv2.imshow("video", frame)
    key = cv2.waitKey(1)
    if key  == ord('q'):
        break
cv2.destroyAllWindows()
  • 使用的是笔记本自带的摄像头,分辨率为1280×720,但输出为640×480,原因是opencv默认的分辨率为640×480
  • 如果想使用opencv获得摄像头原始的分辨率,这里需要用到两个函数get(id), set(id, value),一言以蔽之,get(id)的作用就是获得id对应的属性,set(id, value)是给id对应的属性赋值,id的具体含义参考这篇博客
capture.set(3,5000) # 设置一个比较大的分辨率值,如5000
capture.set(4,5000)
size = (int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT)), int(capture.get(cv2.CAP_PROP_FRAME_WIDTH))) # 获得原始分辨率
# 同理,直接使用类似c++中的枚举值,效果也一样
capture.set(cv2.CAP_PROP_FRAME_WIDTH,5000) # 设置一个比较大的分辨率值,如5000
capture.set(cv2.CAP_PROP_FRAME_HEIGHT,5000)
size = (int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT)), int(capture.get(cv2.CAP_PROP_FRAME_WIDTH))) # 获得原始分辨率
  • 上述代码中,首先使用set函数设置一个比较大的分辨率(保证宽和高都大于摄像头分辨率,这一点可以靠估计,一般的相机宽和高都不大于5000),然后使用get得到的分辨率就是摄像头原始分辨率
  • 疑问:在实验过程中遇到的疑问:在使用双目摄像机时,最终输出的图片原始分辨率为2560×960,但默认参数的opencv得到的图片分辨率为640×240,并不是640×480,这点目前暂时没搞清楚

视频保存异常问题

保存视频的代码如下:

import cv2
capture = cv2.VideoCapture(1)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
videoWriter = cv2.VideoWriter("test.avi", fourcc, 20, (1280,720))
while True:    
    ret, frame = capture.read()    
    frame = cv2.flip(frame,1)    
    videoWriter.write(frame)    
    cv2.imshow("video", frame)    
    key = cv2.waitKey(1)    
    if key  == ord('q'):        
        break
cv2.destroyAllWindows()
videoWriter.release()
  • 使用笔记本电脑的摄像头(分辨率1280×720),想要保存原始分辨率的视频,于是设置cv2.VideoWriter的分辨率参数为1280×720,但保存出来的视频只有6k,并且不能打开,原因是输入视频流的分辨率和规定的cv2.VideoWriter的分辨率不同(输入视频流的分辨率为默认值的640×480),只要将两者改为一致,就可以保存正确的视频
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值