用摄像头捕获视频
import cv2
#创建一个 VideoCapture 对象,参数可以是设备的索引号,或者是一个视频文件
cap = cv2.VideoCapture(0) #设备索引号就是在指定要使用的摄像头。一般的笔记本电脑都有内置摄像头。所以参数就是 0。
while(True):
#读帧
ret, frame = cap.read()
cv2.imshow('frame',frame) #显示一帧图像
if cv2.waitKey(1) & 0xFF == ord('q'): #一毫秒刷新一次图像,等待键盘输入
break
cap.release()
cv2.destroyAllWindows()
- cap.read() 返回两个值,先返回一个布尔值,如果视频读取正确,则为 True,如果错误,则为 False,也可用来判断是否到视频末尾。再返回一个值,为每一帧的图像,该值是一个三维矩阵
- cap.get(propId) 可以获取到视频的一些参数信息
- cap.set(propId,value) 可以设置新的值
// propId
0) CV_CAP_PROP_POS_MSEC 视频文件的当前位置,以毫秒为单位.
1) CV_CAP_PROP_POS_FRAMES 接下来要解码/捕获的帧的基于0的索引。
2) CV_CAP_PROP_POS_AVI_RATIO 视频文件的相对位置:0 - 电影的开始,电影的1 - 结束。
3) CV_CAP_PROP_FRAME_WIDTH 视频流中帧的宽度。
4) CV_CAP_PROP_FRAME_HEIGHT 视频流中帧的高度.
5) CV_CAP_PROP_FPS 帧率.
6) CV_CAP_PROP_FOURCC 编解码器的4个字符代码.
7) CV_CAP_PROP_FRAME_COUNT 视频文件中的帧数。
8) CV_CAP_PROP_FORMAT 通过retrieve()返回的Mat对象的格式。
9) CV_CAP_PROP_MODE 指示当前捕获模式的后端特定值。
10) CV_CAP_PROP_BRIGHTNESS 图像的亮度(仅适用于相机)。
11) CV_CAP_PROP_CONTRAST 图像对比(仅适用于相机).
12) CV_CAP_PROP_SATURATION 图像饱和度(仅适用于相机)。
14) CV_CAP_PROP_HUE 图像的色相(仅适用于相机)。
15) CV_CAP_PROP_GAIN 获取图像(仅适用于相机)。
16) CV_CAP_PROP_EXPOSURE 曝光(仅适用于相机)。
17) CV_CAP_PROP_CONVERT_RGB 指示其他图像应转换为RGB的布尔标志。
18) CV_CAP_PROP_WHITE_BALANCE 目前不支持
19) CV_CAP_PROP_RECTIFICATION 立体声整流标志相机(注意:仅支持DC1394 v 2.x后端)
从文件中播放视频
import cv2
#创建一个 VideoCapture 对象,参数可以是设备的索引号,或者是一个视频文件
cap = cv2.VideoCapture("E://test.mp4") #参数为视频路径
#获取视频相关参数
fps = cap.get(5)
height,width = cap.get(3),cap.get(4)
print("帧率:",fps)
print("高度:",height)
print("宽度:",width)
#设置视频相关参数
cap.set(0,10000) #设置初始视频位置
while(True):
#读帧
ret, frame = cap.read()
cv2.imshow('frame',frame) #显示一帧图像
if cv2.waitKey(1) & 0xFF == ord('q'): #一毫秒刷新一次图像,等待键盘输入
break
cap.release()
cv2.destroyAllWindows()
写视频
在我们捕获视频,并对每一帧都进行加工之后我们想要保存这个视频。对于图片很简单只需要使用 cv2.imwrite()。但对于视频来说就要多做点工作。
这次我们要创建一个 VideoWriter 的对象。我们应该确定一个输出文件的名字。接下来指定 FourCC 编码(下面会介绍)。播放频率和帧的大小也都需要确定。最后一个是 isColor 标签。如果是 True,每一帧就是彩色图,否则就是灰度图。
FourCC 就是一个 4 字节码,用来确定视频的编码格式。可用的编码列表
可以从fourcc.org查到。这是平台依赖的。
import cv2
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID') #指定 FourCC 编码,确定视频的编码格式
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480),True) #创建一个 VideoWriter 的对象。
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
out.write(frame) #将该帧图像写出
cv2.imshow('frame',frame)
if cv2.waitKey(1)& 0xFF== ord("q"):
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()