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_WIDTH
和 cv2.CAP_PROP_FRAME_HEIGHT
屬性。我們還可以設定幀速率、亮度、對比度和其他視訊屬性。
檢查此連結以獲取有關視訊捕獲屬性的更多詳細資訊。我們可以在 cap.get()
函式中使用相同的屬性來獲取它們的當前值。
例如,我們可以使用 cv2.CAP_PROP_FRAME_WIDTH
和 cv2.CAP_PROP_FRAME_HEIGHT
屬性來獲取幀的當前寬度和高度。