Python使用CV2库捕获、播放和保存摄像头视频
特别提示:CV2指的是OpenCV2(Open Source Computer Vision Library),安装的时候是 opencv_python,但在导入的时候采用 import cv2。
若想使用cv2库必须先安装,Python第三方cv2库安装和使用介绍可参见 https://blog.csdn.net/cnds123/article/details/126547307
需要你的计算机有摄像头,笔记本一般内置有摄像头,若是台式机可以连接一个USB摄像头。
捕获视频帧
使用 OpenCV 可以捕获摄像头输出的视频流,并且可以对每一帧视频进行处理。下面是一个简单的示例代码,演示如何从摄像头中捕获视频帧并显示到屏幕上:
import cv2
#定义cv2.VideoCapture 类型的对象
cap = cv2.VideoCapture(0)
#isOpened() 用来判断是否捕获到视频
if not cap.isOpened():
print("无法打摄像机")
exit()
while True:
# 如果正确读取帧,ret为True,cap.read() 方法从摄像头中读取一帧视频
ret, frame = cap.read()
if not ret:
break
# 显示帧视频
cv2.imshow('frame', frame)
# 按 'q' 键退出程序
if cv2.waitKey(1) == ord('q'):
break
# 释放摄像头并关闭所有窗口
cap.release()
cv2.destroyAllWindows()
说明,VideoCapture 对象传入了参数 0,表示设备索引,设备索引就是指定哪个摄像头的数字。正常情况下,一个摄像头会被连接(就像我的情况一样)。所以我简单地传0。你可以通过传递1来选择第二个相机,以此类推。
运行效果如下:
捕获视频帧保存
把视频保存到本地,可以使用cv2.VideoWriter()方法,需要设置输出视频的文件名、编解码器、帧速率和帧大小等参数。VideoWriter() 有5个参数:
参数1:输出文件名,例如: d:/output.mp4。
参数2:FourCC 代码,FourCC 是用于指定视频编解码器的4字节代码。
参数3:帧率的数量。
参数4:帧大小。
参数5:颜色标志。如果为 True,正常颜色输出,否则就是灰色图像输出。
VideoWriter_fourcc()编码方法,常见的视频格式参数:
cv2.VideoWriter_fourcc('M', 'P', '4', 'V')
MPEG-4编码 .mp4 可指定结果视频的大小
cv2.VideoWriter_fourcc('X','2','6','4')
MPEG-4编码 .mp4 可指定结果视频的大小
cv2.VideoWriter_fourcc('I', '4', '2', '0')
该参数是YUV编码类型,文件名后缀为.avi 广泛兼容,但会产生大文件
cv2.VideoWriter_fourcc('P', 'I', 'M', 'I')
该参数是MPEG-1编码类型,文件名后缀为.avi
cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')
该参数是MPEG-4编码类型,文件名后缀为.avi,可指定结果视频的大小
cv2.VideoWriter_fourcc('T', 'H', 'E', 'O')
该参数是Ogg Vorbis,文件名后缀为.ogv
cv2.VideoWriter_fourcc('F', 'L', 'V', '1')
该参数是Flash视频,文件名后缀为.flv
下面是一个简单的例子:
import cv2
# 打开摄像头
cap = cv2.VideoCapture(0)
if not cap.isOpened():
print("无法打摄像机")
exit()
# 设置输出视频的参数
fourcc = cv2.VideoWriter_fourcc(*'MP4V') # 其中*'MP4V'和 'M', 'P', '4', 'V'等效
out = cv2.VideoWriter('d:/output.mp4', fourcc, 20.0, (640, 480))
while True:
# 读取视频帧
ret, frame = cap.read()
if not ret:
break
# 显示视频帧——播放视频
cv2.imshow('frame',frame)
# 将视频帧写入输出视频
out.write(frame)
# 按 'q' 键退出循环
if cv2.waitKey(1) == ord('q'):
break
# 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()
运行后,将在你指定的路径产生找到生成的文件,我这里是d:/output.mp4。