📅  最后修改于: 2023-12-03 15:06:49.341000             🧑  作者: Mango
OpenCV是一个开源的计算机视觉库,其中包含了很多图像处理和计算机视觉方面的函数。本文将介绍如何使用OpenCV保存视频。
我们使用OpenCV的VideoWriter
类来保存视频。在使用VideoWriter
类之前,您需要调用cv2.VideoWriter_fourcc()
函数来获取编解码器,并指定输出视频的帧频率、分辨率和颜色模式。
import cv2
# 定义要保存的视频信息
video_name = 'output.avi' # 视频名称
video_fps = 30 # 帧率
video_size = (640, 480) # 视频大小
fourcc = cv2.VideoWriter_fourcc(*'MJPG') # 编解码器
# 创建VideoWriter对象并设置参数
out = cv2.VideoWriter(video_name, fourcc, video_fps, video_size)
# 打开摄像头并开始录制视频
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read() # 读取视频帧
if ret == False:
break
out.write(frame) # 将每一帧保存到输出文件中
cv2.imshow('video', frame) # 展示每一帧
# 按下q键退出录制
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放视频写入器和摄像头
out.release()
cap.release()
cv2.destroyAllWindows()
cv2.VideoWriter_fourcc()
返回编解码器的唯一标识符,四个字符的代码表示它可以对哪种编解码器进行编码。例如(*'MJPG')
表示一个基于JPEG压缩的编解码器。
cv2.VideoWriter()
创建一个VideoWriter
对象并设置视频帧速率、分辨率和颜色模式。它还需要指定一个输出文件名。
cap = cv2.VideoCapture(0)
打开默认摄像头并设置为0(第一个摄像头),如果您有多个摄像头,可以设置为1或2等。
ret, frame = cap.read()
从视频流中获取一帧视频。返回两个值:布尔型的ret
表示是否成功读取帧,帧画面数据则通过frame
返回。
out.write(frame)
将每一帧的画面写入视频文件中。
cv2.imshow('video', frame)
展示每一帧画面。
if cv2.waitKey(1) & 0xFF == ord('q'):
等待1ms,按q键退出程序。
out.release()
关闭视频写入器。
cap.release()
关闭摄像头。
cv2.destroyAllWindows()
关闭所有窗口。
在使用cv2.VideoWriter()
方法时,必须保证输出文件的扩展名正确,否则会出现以下错误:
[ERROR:0] global C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-8_h9cqgi\opencv\modules\videoio\src\cap.cpp (512) `anonymous-namespace'::VideoWriterBackend::open VIDEOIO ERROR: VFW backend: Could not find codec 65542-4\`.
此错误表示编码器未找到,这可能是因为扩展名无法识别而导致的。