Python | OpenCV 影片讀取與播放
📑 目錄
📚 前言
在上一篇 圖片儲存與格式轉換 中,我們學會了如何儲存圖片並進行格式轉換。
這一篇要進一步學習 影片讀取與播放,理解影片其實就是一連串影格(frames)的集合。
🎨 範例影片
- 來源:Pexels,屬於無版權影片,可自由下載與使用。
- 內容:影片呈現一個終端機畫面,長度約 2 秒,適合作為 OpenCV 測試範例。
- 下載後將檔名改為
sample.mp4,放到專案的assets/目錄下。
🎥 使用 VideoCapture 讀取影片
OpenCV 提供 cv2.VideoCapture() 來讀取影片檔或開啟攝影機。官方文件
語法:
1 | cap = cv2.VideoCapture("assets/sample.mp4") # 讀取影片檔案 |
- 字串參數:影片檔案路徑。
- 數字參數:攝影機編號。
👉 在 Windows 環境下,若遇到錯誤可加上 cv2.CAP_DSHOW:
1 | cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) |
🖼️ 播放影片逐幀顯示
使用 cap.read() 讀取影片的每一幀 (frame),並用 imshow() 顯示:
1 | # read_video.py |

圖:逐幀播放影片,按下 q 鍵結束,或是等影片結束
🌈 顏色轉換 (cvtColor)
可以在播放過程中轉換顏色,例如轉成灰階:
1 | # read_video_gray.py |

圖:即時攝影機圖片轉換為灰階顯示
👉 提示:
waitKey()的參數通常設為1000/FPS,能讓播放速度更接近原始影片。
🔧 影片屬性與隨機存取
除了逐幀播放,也能讀取影片屬性,甚至跳到指定影格:
1 | # video_properties.py |

圖:讀取影片屬性並定位到指定影格
🌐 讀取 MJPEG 串流影片
除了本地影片檔與攝影機,也能讀取網路串流,例如交通監視器的 MJPEG 圖片:
1 | # read_mjpeg_stream.py |

圖:讀取交通監視器的 MJPEG 串流圖片
👉 MJPEG 串流通常延遲較低,但解析度與 FPS 可能受限。
⚠️ 注意事項
- 效能問題:影片播放速度與
waitKey()的參數有關,數值越小更新越快。 - 資源釋放:使用完
VideoCapture記得呼叫release(),並用destroyAllWindows()關閉視窗。 - 顏色通道:同樣是 BGR,不是 RGB。
- 隨機存取:不同影片格式支援度不同,跳幀可能不精準。
- 串流穩定性:MJPEG 串流可能斷線,需要重新建立連線。
🎯 結語
這一篇我們學會了如何使用 cv2.VideoCapture() 讀取影片、逐幀播放、顏色轉換、屬性查詢,以及 MJPEG 串流。
下一篇進入 影片輸出與編碼,學習如何將影格編碼並輸出為影片檔案。
📖 如在學習過程中遇到疑問,或是想了解更多相關主題,建議回顧一下 Python | OpenCV 系列導讀,掌握完整的章節目錄,方便快速找到你需要的內容。
註:以上參考了
OpenCV Tutorials
OpenCV-Python Tutorials
OpenCV-tutorial_py_video_display
Pexels
1968-高速公路資訊網