视频处理入门

OpenCVOpenCVBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

欢迎来到这个关于如何使用 OpenCV-Python 处理视频的实验!OpenCV(开源计算机视觉库)是一个强大的库,专为图像处理、机器学习和计算机视觉应用而设计。在这个实验中,我们将重点介绍如何在 OpenCV-Python 中处理视频。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL opencv(("OpenCV")) -.-> opencv/BasicOperationsGroup(["Basic Operations"]) opencv/BasicOperationsGroup -.-> opencv/fourcc("VideoWriter Fourcc") opencv/BasicOperationsGroup -.-> opencv/imread("Image Read") opencv/BasicOperationsGroup -.-> opencv/imwrite("Image Write") opencv/BasicOperationsGroup -.-> opencv/video_capture("VideoCapture") opencv/BasicOperationsGroup -.-> opencv/video_writer("VideoWriter") subgraph Lab Skills opencv/fourcc -.-> lab-14766{{"视频处理入门"}} opencv/imread -.-> lab-14766{{"视频处理入门"}} opencv/imwrite -.-> lab-14766{{"视频处理入门"}} opencv/video_capture -.-> lab-14766{{"视频处理入门"}} opencv/video_writer -.-> lab-14766{{"视频处理入门"}} end

读取视频并保存帧

要捕获视频,你需要创建一个 VideoCapture 对象。以下是一个读取视频并将每一帧保存到 frame 文件夹的示例:

视频路径为 /home/labex/project/video.mp4

文件路径为 /home/labex/project/read_video.py

打开 read_video.py 文件,然后输入以下代码。

import cv2
import os

## 检查 'frame' 文件夹是否存在。如果不存在则创建它。
folder = os.path.exists('frame')
if not folder:
	os.makedirs('frame')
	print('new folder...')
	print('OK')
else:
	print('There is this folder!')

## 帧编号
number = 0

## 创建一个 VideoCapture 对象
cap = cv2.VideoCapture('video.mp4')

while True:
    ## 从视频中读取一帧
    ret, frame = cap.read()

    ## 帧编号增加
    number = number + 1
    if ret:
        ## 保存帧
        cv2.imwrite(f"./frame/save{number}.jpg", frame)

    ## 退出循环
    else:
        break

print('每一帧已保存到 frame 文件夹')

print('视频读取成功!')

## 释放 VideoCapture 对象
cap.release()

在这个示例中,我们通过传递视频文件的路径创建了一个 VideoCapture 对象。然后,我们使用 while 循环通过 read() 方法读取视频的每一帧。如果帧读取成功,我们使用 imwrite() 方法保存该帧。最后,我们释放 VideoCapture 对象。

你可以在终端中运行以下命令来执行。

python /home/labex/project/read_video.py

或者你可以直接点击右上角的按钮 Run Python File 来执行。

之后,等待终端输出 "视频读取成功!",你将在 frame 文件夹中看到每一帧的图片。

写入并保存视频

要写入并保存视频,你需要创建一个 VideoWriter 对象。以下是一个如何写入并保存视频的示例:

视频路径为 /home/labex/project/video.mp4

文件路径为 /home/labex/project/write_video.py

打开 write_video.py 文件,然后输入以下代码。

import cv2

## 创建一个 VideoCapture 对象
cap = cv2.VideoCapture('video.mp4')

## 获取视频帧的尺寸和帧率
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = int(cap.get(cv2.CAP_PROP_FPS))

## 创建一个 VideoWriter 对象
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, fps, (width, height))

while True:
    ## 从视频中读取一帧
    ret, frame = cap.read()

    if ret:
        ## 处理帧
        ## ...

        ## 将处理后的帧写入输出视频
        out.write(frame)

    else:
        break

print('视频保存成功!')

## 释放 VideoCapture 和 VideoWriter 对象
cap.release()
out.release()

在这个示例中,我们通过传递视频文件的路径创建了一个 VideoCapture 对象。然后,我们使用 get() 方法获取视频帧的尺寸和帧率。接下来,我们通过传递输出文件名、fourcc 编码、帧率和帧尺寸创建了一个 VideoWriter 对象。fourcc 编码是一个四字节编码,用于指定视频编解码器。在这个示例中,我们使用了 XVID 编解码器。

然后,我们使用 while 循环通过 read() 方法读取视频的每一帧。如果帧读取成功,我们对其进行处理(例如,应用滤镜),并使用 VideoWriter 对象的 write() 方法将其写入输出视频。最后,我们释放 VideoCaptureVideoWriter 对象。

你可以在终端中运行以下命令来执行。

python /home/labex/project/write_video.py

或者你可以直接点击右上角的按钮 Run Python File 来执行。

之后,等待终端输出 "视频保存成功!",你将在项目文件夹中看到一个名为 output.avi 的输出视频。然而,当前环境不支持查看视频文件。你需要将文件下载到本地,如下所示,然后使用视频播放器查看。

Download Video File
Download Video File

总结

恭喜!你现在已经学会了如何使用 OpenCV-Python 读取、显示、写入和保存视频。掌握了这些基本技能后,你可以开始探索更高级的计算机视觉技术和应用。

你可以自由扩展本教程的内容,尝试不同的视频格式、对帧应用滤镜,或者实验对象跟踪和检测。可能性是无限的!