📜  使用 OpenCV 保存视频(1)

📅  最后修改于: 2023-12-03 15:06:49.341000             🧑  作者: Mango

使用 OpenCV 保存视频

介绍

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\`.

此错误表示编码器未找到,这可能是因为扩展名无法识别而导致的。