一、读入视频
1.1 从摄像头读入视频
函数原型
VideoCapture(flag)
# flag : 设备索引,一般设为0
1.2 读入视频文件
VideoCapture是一个重载函数
函数原型
VideoCapture(filename)
# filename: 视频文件路径
二、显示视频
思路概述
- 循环从摄像头或视频文件中读入一帧;
- 对该帧进行用户希望的处理,如灰度化、翻转或其他复杂操作;
- 将处理后的图像用imshow显示出来
要点
通过waitKey
设置读入帧的间隔,间隔越长视频越卡顿。
三、写入视频
FourCC:是用于指定视频编解码器的4字节代码。
下面代码实现将摄像头中的视频录制到指定文件。
# 1.获取摄像头
cap = cv.VideoCapture(0)
# 2.定义编解码器并创建VideoWriter对象
fourcc = cv.VideoWriter_fourcc(*'XVID')
# 3.创建写出流
out = cv.VideoWriter('output.avi', fourcc, 20.0, (640, 480))
while True:
ret,frame = cap.read()
# ...(执行一些步骤对frame进行一定处理)
# 4. 写入帧
out.write(frame)
# 写入间隔为1s
if cv.waitKey(1) == ord('q'):
break
# 5. 释放设备和写出流
cap.release()
out.release()
四、程序演示
下面这个程序实现将摄像头拍摄下来的画面水平翻转后保存到 avi 文件中。拍摄时帧捕捉间隔为1ms一帧,当用户按下 q 键时退出录制。
import cv2 as cv
def test():
cap = cv.VideoCapture(0)
# 定义编解码器并创建VideoWriter对象
fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('output.avi', fourcc, 20.0, (640, 480))
if not cap.isOpened():
print("无法打开摄像头")
exit()
while True:
# 逐帧捕获
ret, frame = cap.read()
# 如果正确读取帧,ret为True
if not ret:
print("无法正确读入该帧...")
break
# 翻转图像
img = cv.flip(frame,1)
# 显示结果帧e
cv.imshow('frame', img)
# 写入流写入该帧
out.write(img)
# 帧捕捉间隔为1s
if cv.waitKey(1) == ord('q'):
break
# 完成所有操作后,释放捕获器
cap.release()
out.release()
cv.destroyAllWindows()
if __name__ == "__main__":
test()