OpenCV 中的 VideoWriter 类

一、VideoWriter 类的介绍

VideoWriter 是 OpenCV 中用于将视频写入磁盘的类。它默认使用 XVID 编解码器和 AVI 格式保存视频,同时也支持其他格式的视频文件的保存。

VideoWriter 主要有以下几个参数:

  • filename:要保存的视频文件的路径及文件名。
  • fourcc:用于指定视频编解码器的 FourCC 代码。
  • fps:要保存的视频的帧率。
  • frameSize:要保存的视频的分辨率。
  • isColor:指定视频帧是否为彩色图像。

import cv2

# 创建 VideoWriter 对象
writer = cv2.VideoWriter("output.avi", cv2.VideoWriter_fourcc(*"XVID"), 30, (640, 480))

# 读取视频并将帧写入文件
cap = cv2.VideoCapture(0)
while True:
    ret, frame = cap.read()
    if not ret:
        break
    # 写入帧
    writer.write(frame)
    # 显示帧
    cv2.imshow("frame", frame)
    if cv2.waitKey(1) == ord("q"):
        break

# 释放对象
cap.release()
writer.release()
cv2.destroyAllWindows()

二、使用不同的编解码器

VideoWriter 默认使用 XVID 编解码器,但是如果系统没有安装该编解码器,则无法正确保存视频文件。因此,我们需要使用其他编解码器来保存视频。

下面是一个可以通过 FFMPEG 来保存视频的例子:


import subprocess as sp
import cv2

# 设置 FFMPEG 命令
FFMPEG_BIN = "ffmpeg"
command = [FFMPEG_BIN,
           '-y',  # 覆盖输出文件
           '-f', 'rawvideo',
           '-pix_fmt', 'bgr24',
           '-s', '640x480',
           '-r', '25',
           '-i', '-',
           '-an',
           '-vcodec', 'mpeg4',
           'output.avi']

# 打开 FFMPEG 进程
pipe = sp.Popen(command, stdin=sp.PIPE)

# 读取视频并将帧写入文件
cap = cv2.VideoCapture(0)
while True:
    ret, frame = cap.read()
    if not ret:
        break
    # 写入帧
    pipe.stdin.write(frame.tostring())
    # 显示帧
    cv2.imshow("frame", frame)
    if cv2.waitKey(1) == ord("q"):
        break

# 关闭 FFMPEG 进程
pipe.stdin.close()
pipe.wait()

# 释放对象
cap.release()
cv2.destroyAllWindows()

三、调整视频帧的大小和帧率

在某些情况下,保存视频时需要将视频帧的大小和帧率进行调整,这需要使用 resize() 和 cv2.CAP_PROP_FPS 属性。下面的代码按照每秒 10 帧,将输入的图像的大小调整为 320×240,输出的视频的帧率为 30 帧每秒。


import cv2

# 创建 VideoWriter 对象
writer = cv2.VideoWriter("output.avi", cv2.VideoWriter_fourcc(*"XVID"), 30, (320, 240))

# 读取视频并将帧写入文件
cap = cv2.VideoCapture(0)
frame_count = 0
while True:
    ret, frame = cap.read()
    if not ret:
        break
    # 调整帧大小
    frame = cv2.resize(frame, (320, 240))
    # 写入帧
    writer.write(frame)
    # 显示帧
    cv2.imshow("frame", frame)
    if cv2.waitKey(1) == ord("q"):
        break
    # 调整帧率
    frame_count += 1
    if frame_count % 3 == 0:
        cap.set(cv2.CAP_PROP_POS_FRAMES, frame_count + 1)

# 释放对象
cap.release()
writer.release()
cv2.destroyAllWindows()

四、保存为其他视频格式

VideoWriter 默认使用 AVI 格式保存视频,但是可以通过更改 fourcc 来保存为其他格式的视频文件。


import cv2

# 创建 VideoWriter 对象
writer = cv2.VideoWriter("output.mkv", cv2.VideoWriter_fourcc(*"X264"), 30, (640, 480))

# 读取视频并将帧写入文件
cap = cv2.VideoCapture(0)
while True:
    ret, frame = cap.read()
    if not ret:
        break
    # 写入帧
    writer.write(frame)
    # 显示帧
    cv2.imshow("frame", frame)
    if cv2.waitKey(1) == ord("q"):
        break

# 释放对象
cap.release()
writer.release()
cv2.destroyAllWindows()

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/207210.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-08 14:21
下一篇 2024-12-08 14:21

相关推荐

  • 如何在PyCharm中安装OpenCV?

    本文将从以下几个方面详细介绍如何在PyCharm中安装OpenCV。 一、安装Python 在安装OpenCV之前,请确保已经安装了Python。 如果您还没有安装Python,可…

    编程 2025-04-29
  • Python OpenCV 直线检测

    本文将介绍在Python OpenCV中进行直线检测的方法,主要涉及到图像的边缘检测、霍夫变换和绘制直线等操作。 一、边缘检测 由于直线检测是从图像的边缘开始的,因此必须先找到图像…

    编程 2025-04-29
  • Opencv 实现读取 BMP 图片

    Opencv 是一个基于 C/C++ 语言的开源计算机视觉库,可以用于图像处理、特征识别、目标跟踪、机器学习等领域。在图像处理中,读取 BMP 图片是常见操作之一。 一、打开 BM…

    编程 2025-04-27
  • opencv鼠标绘图

    本文将为您详细介绍如何使用opencv在原始图片上进行鼠标绘图。 一、准备工作 在开始绘制之前,您需要先准备好以下的工作: 1、安装opencv库,可以通过pip install …

    编程 2025-04-27
  • 深入探讨OpenCV版本

    OpenCV是一个用于计算机视觉应用程序的开源库。它是由英特尔公司创建的,现已由Willow Garage管理。OpenCV旨在提供一个易于使用的计算机视觉和机器学习基础架构,以实…

    编程 2025-04-25
  • OpenCV的全面介绍

    OpenCV是一款强大的开源计算机视觉库,它包含了各种用于图像和视频处理,图像识别和机器学习的函数,它可以用于开发实时的计算机视觉软件和系统,特别适用于图像处理、物体识别、人脸识别…

    编程 2025-04-25
  • Opencv CUDA编译用法介绍

    本文将从多个方面对Opencv CUDA编译进行详细的阐述和解读。通过以下小标题,我们将详细介绍如何进行编译。 一、环境搭建 在使用CUDA进行加速之前,需要进行CUDA的环境搭建…

    编程 2025-04-25
  • 详解OpenCV高斯滤波

    一、高斯滤波的介绍 OpenCV高斯滤波是一种平滑图像的处理方法,通常用于去除噪声、模糊化图像等。它的原理是利用高斯函数进行加权平均,从而减少噪声的干扰。 在图像处理中,噪声是一种…

    编程 2025-04-25
  • Clion配置OpenCV

    Clion是一个功能强大的跨平台集成开发环境,但要开发图像处理、计算机视觉等相关领域应用,需要将OpenCV集成到Clion中,才能方便地进行开发。本文将介绍如何在Clion中配置…

    编程 2025-04-24
  • OpenCV之cv2.imshow()

    一、cv2.imshow()介绍 cv2.imshow()是OpenCV中显示图像的主要函数之一。它可以显示传递给它的图像窗口,或者将图像作为选定窗口的内容。cv2.imshow(…

    编程 2025-04-24

发表回复

登录后才能评论