首先先看OpenCV4.1官方中文手册P32,关于VideoCapture的set和get的说明,如图1所示。说明了19个参数都是可读的,但部分参数可写。具体关于它们的读写我没有仔细深究,在表1注出了我所知的它们读写属性。

参数名称 | 值 | 说明 | 读/写 |
CV.CAP_PROP_POS_MSEC | 0 | 当前视频文件的时间位置(返回毫秒)或视频捕获时间戳 | Y/ |
CV.CAP_PROP_POS_FRAMES | 1 | 从0开始的解码/捕获时间帧 | Y/ |
CV.CAP_PROP_POS_AVI_RATIO | 2 | 返回视频文件的相关位置:0,视频开始。1,视频结束 | Y/ |
CV.CAP_PROP_FRAME_WIDTH | 3 | 视频流中的帧宽 | Y/Y |
CV.CAP_PROP_FRAME_HEIGHT | 4 | 视频流中的帧高 | Y/Y |
CV.CAP_PROP_FPS | 5 | 帧率 | Y/Y |
CV.CAP_PROP_FOURCC | 6 | 返回解码方式中的四字符 | Y/Y |
CV.CAP_PROP_FRAME_COUNT | 7 | 视频文件的总帧数 | Y/ |
CV.CAP_PROP_FORMAT | 8 | 由retrieve()函数返回的矩阵对象的格式 | Y/ |
CV.CAP_PROP_MODE | 9 | 用于预测当前捕获模式的后端专用值 | Y/ |
CV.CAP_PROP_BRIGHTNESS | 10 | 图像的亮度(仅用于摄像头) | Y/Y |
CV.CAP_PROP_CONTRAST | 11 | 图像的对比度(仅用于摄像头) | Y/Y |
CV.CAP_PROP_SATURATION | 12 | 图像的饱和度(仅用于摄像头) | Y/Y |
CV.CAP_PROP_HUE | 13 | 图像的色调(仅用于摄像头) | Y/Y |
CV.CAP_PROP_GAIN | 14 | 图像增益(仅用于摄像头) | Y/Y |
CV.CAP_PROP_EXPOSURE | 15 | 曝光度(仅用于摄像头) | Y/Y |
CV.CAP_PROP_CONVERT_RGB | 16 | 用于预测图像是否应该被转换为RGB的布尔位 | Y/ |
CV.CAP_PROP_WHITE_BALANCE | 17 | 白平衡(当前不支持) | Y/ |
CV.CAP_PROP_RECTIFICATION | 18 | 立体相机的纠正位 | Y/ |
下面的代码,是已经跑通的Python代码。Python版本为3.7,OpenCV版本为4.5,在树莓派4B的linux系统上执行正常。
import cv2 as cv
#打开摄像头
image = cv.VideoCapture(0)
#图像宽度
image.set(3,600)
image.set(cv.CAP_PROP_FRAME_WIDTH,600)
#图像高度
image.set(4,500)
image.set(cv.CAP_PROP_FRAME_HEIGHT,500)
#视频帧率
image.set(5, 30) #设置帧率
image.set(cv.CAP_PROP_FPS, 30)
#解码方式四字符
image.set(cv.CAP_PROP_FOURCC, cv.VideoWriter.fourcc('M', 'J', 'P', 'G'))
#图像亮度
image.set(cv.CAP_PROP_BRIGHTNESS, 63) #设置亮度 -64 - 64 0.0
#图像对比度
image.set(cv.CAP_PROP_CONTRAST, 0) #设置对比度 -64 - 64 2.0
#图像曝光度
image.set(cv.CAP_PROP_EXPOSURE, 2000) #设置曝光值 1.0 - 5000 156.0
while (image.isOpened()):
#逐帧捕获
ret, frame = image.read()
#显示图像
cv.imshow("real_time",frame)
#等待按键ESC按下
if(cv.waitKey(5) == 27):
break
#释放摄像头
image.release()
#关闭所有该程序打开的窗口
cv.destroyAllWindows()
图2为执行结果,图像是实时刷新显示。
