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