注释基本都在代码里面了
import cv2 # 图像处理的库 OpenCv
cv2.namedWindow("Image") #创建窗口
#创建摄像头
'''
为了获取视频,你应该创建一个 VideoCapture 对象。
他的参数可以是设备的索引号,或者是一个视频文件。设备索引号就是在指定要使用的摄像头。
一般的笔记本电脑都有内置摄像头。所以参数就是 0。你可以通过设置成 1 或者其他的来选择别的摄像头。
之后,你就可以一帧一帧的捕获视频了。但是最后,别忘了停止捕获视频。使用 ls /dev/video*命令可以查看摄像头设备
'''
cap = cv2.VideoCapture(0)
#设置参数
'''cap.read() 返回一个布尔值(True/False)。如果帧读取的是正确的,就是 True。
所以最后你可以通过检查他的返回值来查看视频文件是否已经到了结尾。
有时 cap 可能不能成功的初始化摄像头设备。这种情况下上面的代码会报错。
你可以使用 cap.isOpened(),来检查是否成功初始化了。
如果返回值是True,那就没有问题。否则就要使用函数 cap.open()。
你可以使用函数 cap.get(propId) 来获得视频的一些参数信息。这里propId 可以是 0 到 18 之间的任何整数。
每一个数代表视频的一个属性,见表其中的一些值可以使用cap.set(propId,value) 来修改,value 就是
你想要设置成的新值。例如,我可以使用 cap.get(3) 和 cap.get(4) 来查看每一帧的宽和高。
默认情况下得到的值是 640X480。但是我可以使用 ret=cap.set(3,320)和 ret=cap.set(4,240) 来把宽和高改成 320X240
cap.set(3, 1080)
等价于
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1080)
set(self, propId, value): 对应的所有属性表如下:
参数 propld 功能
cv2.CAP_PROP_POS_MSEC 0 视频文件的当前位置(以毫秒为单位)或视频捕获时间戳
cv2.CAP_PROP_POS_FRAMES 1 基于0的索引将被解码/捕获下一帧
cv2.CAP_PROP_POS_AVI_RATIO 2 视频文件的相对位置:0 - 视频的开始,1 - 视频的结束
cv2.CAP_PROP_FRAME_WIDTH 3 帧的宽度
cv2.CAP_PROP_FRAME_HEIGHT 4 帧的高度
cv2.CAP_PROP_FPS 5 帧速
cv2.CAP_PROP_FOURCC 6 4个字符表示的视频编码器格式
cv2.CAP_PROP_FRAME_COUNT 7 帧数
cv2.CAP_PROP_FORMAT 8 byretrieve()返回的Mat对象的格式
cv2.CAP_PROP_MODE 9 指示当前捕获模式的后端特定值
cv2.CAP_PROP_BRIGHTNESS 10 图像的亮度(仅适用于相机)
cv2.CAP_PROP_CONTRAST 11 图像对比度(仅适用于相机)
cv2.CAP_PROP_SATURATION 12 图像的饱和度(仅适用于相机)
cv2.CAP_PROP_HUE 13 图像的色相(仅适用于相机)
cv2.CAP_PROP_GAIN 14 图像的增益(仅适用于相机)
cv2.CAP_PROP_EXPOSURE 15 曝光(仅适用于相机)
cv2.CAP_PROP_CONVERT_RGB 16 表示图像是否应转换为RGB的布尔标志
cv2.CAP_PROP_WHITE_BALANCE 17 目前不支持
cv2.CAP_PROP_RECTIFICATION 18 立体摄像机的整流标志
'''
cap.set(3, 480)
while(cap.isOpened()): #isOpened() 检测摄像头是否处于打开状态
ret,img = cap.read() #把摄像头获取的图像信息保存之img变量
if ret == True: #如果摄像头读取图像成功
cv2.imshow('Image',img)
# 每帧数据延时 1ms,延时为 0 读取的是静态帧
k = cv2.waitKey(100)
#按下a或者A截图保存到本地,并且退出
if k == ord('a') or k == ord('A'):
cv2.imwrite('test.jpg',img)
break
cap.release() #关闭摄像头
cv2.waitKey(0)
cv2.destroyAllWindow()