一般相机的默认参数都是可以修改的,例如分辨率、曝光度、帧速率等等。
在创建一个 VideoCapture 对象后,使用函数 capture.get(propId) 来获得视频的一些参数信息,如使用capture.get(3)、capture.get(4)来分别获取相机的宽和高。
使用capture.set()函数即可修改相机参数,如设置capture.set(3,600)、capture.set(4,480)即可将分辨率设为600*480。
更多参数设置可参考该链接。
https://blog.csdn.net/u011436429/article/details/80604590
根据上面介绍我们可以使用capture.set()方法来设置相机分辨率,但是在保存高分辨率图片会出现一个问题,如当我设置的分辨率为2592*1944时,保存的图片文件大小在14MB,但是打开图片时是一副黑色的照片并没有相机拍摄的内容。
这是由于设定高分辨率后,相机需要一定时间来读取该分辨率下的图片流,而在程序在相机未读取成功前就保存了图片,因此会会出现文件大小符合分辨率要求而内容丢失的情况。因此最简单的方法只要在相机参数设置后使用一个延迟函数,让相机有充分时间准备即可解决问题。
设置的分辨率不高时则无需使用这种方法。
import cv2
import tkinter
import tkinter.filedialog
import time
cap1 = cv2.VideoCapture(1)
cap1.set(3, 2592)
cap1.set(4, 1944)
#延迟函数
time.sleep(4)
ret1, imgleft = cap1.read()
fname1 = tkinter.filedialog.asksaveasfilename(title=u'保存图片1', filetypes=[("BMP", ".bmp")])
# imgleft.save(str(fname1) + '.png', 'PNG')
# imgright.save(str(fname1) + '.png', 'PNG')
cv2.imwrite(str(fname1) + '.bmp', imgleft)
print('Save the pictures successfully')