OpenCV 读取视频

Ammar Ali 2024年2月15日
OpenCV 读取视频

本教程将讨论在 Python 中使用 OpenCV 的 VideoCapture() 函数读取视频。

在 Python 中使用 OpenCV 的 VideoCapture() 函数读取视频

一个视频文件包含多个帧,我们可以使用 OpenCV 读取和显示这些帧。我们可以使用 OpenCV 的 VideoCapture() 函数来读取视频文件。

我们可以使用 cap.isOpened() 函数来检查捕获是否已初始化。如果捕获未初始化,此函数将返回 false,我们可以使用 cap.open() 函数来初始化捕获。

我们可以使用 cap.read() 函数读取视频中存在的帧,然后我们可以处理它们,然后使用 OpenCV 的 imshow() 函数显示它们。在这个例子中,我们将使用 OpenCV 的 cvtColor() 函数将每一帧转换为灰度。

cap.read() 函数还返回一个标志,如果帧已被接收并准备好处理,则该标志将为真,我们可以使用此标志来检查视频文件的结尾并相应地打印一些内容。这个标志也可以在我们等待帧到达的实时流视频中使用。

在这个例子中,我们将使用标志来检查视频的结束,如果达到,我们将打印一条消息并中断循环。OpenCV 的 waitKey() 函数可以在代码中添加以毫秒为单位的延迟,我们将使用它来减慢视频的播放速度。

在接收并处理完所有帧之后,我们可以使用 cap.release() 函数来释放捕获。OpenCV 的 destroyAllWindows() 函数可以销毁所有打开的窗口。

例如,让我们使用一个视频,读取它的帧,并将它们转换为灰度。

请参阅下面的代码。

import numpy as np
import cv2

cap = cv2.VideoCapture("bon_fire_dog_2.mp4")
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.imshow("frame", gray)
    cv2.waitKey(10)
    if cv2.waitKey(1) == ord("q"):
        break

cap.release()
cv2.destroyAllWindows()

输出:

读取视频

我们还定义了一个键,如果使用 waitKey() 函数按下该键将中断循环。它很有用,因为我们无法手动终止视频。

我们可以使用 cap.set() 函数来设置许多视频捕获属性。set() 函数的第一个参数是我们要更改的属性,第二个参数是属性的值。

例如,要设置视频中帧的宽度和高度,我们可以使用 cv2.CAP_PROP_FRAME_WIDTHcv2.CAP_PROP_FRAME_HEIGHT 属性。我们还可以设置帧速率、亮度、对比度和其他视频属性。

检查此链接以获取有关视频捕获属性的更多详细信息。我们可以在 cap.get() 函数中使用相同的属性来获取它们的当前值。

例如,我们可以使用 cv2.CAP_PROP_FRAME_WIDTHcv2.CAP_PROP_FRAME_HEIGHT 属性来获取帧的当前宽度和高度。

作者: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

相关文章 - OpenCV Video