當我們在進行影像處理時, 在Python的世界最常聽到的就是OpenCV, 而我們在處理影片時也會想要僅針對某時間段的影片進行處理, 今天我們就來教您如何透過OpenCV來讀取特定的時間區段。
在進入主題之前, 有一些基本概念務必先行建立,
假設我們已經知道今天需要對一個影片的10 ~ 15秒之間的影像進行處理時(文字辨識、人臉辨識…), 應該要怎麼切出這一段影像資料呢? 這雖然是一個簡單的I/O處理, 但我們會需要一點計算與單位轉換, 這次的主軸主要是協助我們理解影像處理的基本單位。
我們先來翻翻文檔: https://docs.opencv.org/3.4/d4/d15/group__videoio__flags__base.html
我們可以看到說明是指定接下來要處理的frame位置, 既然已經知道怎麼使用了, 那搭配我們上述的基礎知識, 相信聰明的大家應該都能夠輕易的轉換及指定。
import cv2
# 影片的路徑
video_path = 'your_video.mp4'
# 影片捕捉物件
cap = cv2.VideoCapture(video_path)
fps = cap.get(cv2.CAP_PROP_FPS)
# 設定開始時間(秒)
start_time_sec = 10
start_frame = int(start_time_sec * fps)
cap.set(cv2.CAP_PROP_POS_FRAMES, start_frame)
# 設定結束時間(秒)
end_time_sec = 15
end_frame = int(end_time_sec * fps)
# 如果還沒處理到結束的frame位置則...
while cap.get(cv2.CAP_PROP_POS_FRAMES) < end_frame:
ret, frame = cap.read()
if not ret:
break # 當所有幀都被讀取完畢時退出循環
# 在這裡處理每一幀的操作,例如顯示視頻,保存幀等
# 釋放資源
cap.release()
cv2.destroyAllWindows()
相較於「語音領域」又是一門全新領域的嘗試,不過有了OpenCV 處理起來算是蠻順手的, 雖然尚未掌握的非常全面, 但初步的影像處理已經能夠滿足我們入門的初學者了, 接著我們可以針對每一張frame進行影像的辨識、車牌辨識、OCR…各式各樣的影像應用。
更多關於影像處理的知識歡迎來「🔒 阿Han的軟體心法實戰營 - 影像辨識」坐坐。