Python OpenCV 讀取播放video影片檔案

本篇介紹如何用 Python 搭配 OpenCV 模組的 cv2.VideoCapture 讀取影片檔案並播放顯示影片串流的畫面。

使用範例

如果遇到 ImportError: No module named 'cv2' 這個錯誤訊息的話,請安裝 python 的 OpenCV 模組,參考這篇安裝吧!。

用 VideoCapture 來播放video影片跟播放camera攝影機串流影像是一樣的,只是將參數中的攝影機代號換成影片的檔案名稱,
在顯示 frame 影像時,如果影像播放的很快的話,可以藉由調整 cv2.waitKey() 的參數來控制 frame 與 frame 之前的延遲,
如果 cv2.waitKey() 參數調的太小,那麼影片就會播的很快,
反之 cv2.waitKey() 參數調的太大,那麼影片就會播的很慢,
正常情況下 25 ms(milliseconds) 會是剛剛好的預設值。

opencv-video.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cv2

cap = cv2.VideoCapture('vtest.avi')

while cap.isOpened():
ret, frame = cap.read()
# if frame is read correctly ret is True
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame', gray)
if cv2.waitKey(1) == ord('q'):
break
cap.release()
cv2.destroyAllWindows()

播放中的截圖如下所示:
原本影片是彩色影像的,我們透過cv2.cvtColor() 將影像從彩色轉成灰階再顯示出來。

下一篇教學是如何儲存寫入video影片到檔案

其他參考
OpenCV: Getting Started with Videos
https://docs.opencv.org/master/dd/d43/tutorial_py_video_display.html
OpenCV 擷取網路攝影機串流影像,處理並寫入影片檔案教學 - G. T. Wang
https://blog.gtwang.org/programming/opencv-webcam-video-capture-and-file-write-tutorial/

其它相關文章推薦
Python OpenCV 彩色轉灰階(RGB/BGR to GRAY)
Python OpenCV 彩色轉HSV(RGB/BGR to HSV)
Python OpenCV 彩色轉YCbCr(RGB/BGR to YCbCr)
Python OpenCV 灰階轉彩色(Gray to RGB/BGR)
Python OpenCV 影像二值化 Image Thresholding
Python OpenCV 影像平滑模糊化 blur
Python OpenCV 影像邊緣偵測 Canny Edge Detection
Python OpenCV 垂直vconcat 和水平hconcat 影像拼接
Python OpenCV resize 圖片縮放
Python 新手入門教學懶人包
小專案 Python OpenCV 圖片轉字元圖畫