1. 程式人生 > >OpenCV讀寫視訊檔案

OpenCV讀寫視訊檔案

OpenCV提供了VideoCapture類來支援視訊讀/寫。VideoCapture類通過read()函式來獲取每一幀,即一個RGB影象。

本文用到的視訊traffic.flv,來源於原作者Github,地址為: 
https://github.com/techfort/pycv/tree/master/chapter8/surveillance_demo

 

OpenCV讀取視訊並顯示

# -*- coding:utf-8 -*-

import cv2

cap = cv2.VideoCapture('video/traffic.flv')

while True:
    ret, frame = cap.read() # 讀
    cv2.imshow("capture", frame) # 顯示
    if cv2.waitKey(100) & 0xFF == ord('q'): #鍵盤按鍵q,退出
        break

 

OpenCV寫入視訊

# -*- coding:utf-8 -*-

import cv2

# Step1. 呼叫VideoCapture構造器
cap = cv2.VideoCapture('video/traffic.flv')
fps = cap.get(cv2.CAP_PROP_FPS)
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))

# Step2. 改用YUV顏色編碼 寫入到另一個視訊檔案中
# 注意,視訊檔案的字尾改為.avi,由於I420採用YUV顏色編碼,只支援.avi格式
writer = cv2.VideoWriter('video/trafficOutput.avi', cv2.VideoWriter_fourcc('I', '4', '2', '0'), fps, size)
ret, frame = cap.read()
while ret:
    writer.write(frame)
    ret, frame = cap.read()


# Step3.讀取新的檔案
cap = cv2.VideoCapture('video/trafficOutput.avi')
while True:
    ret, frame = cap.read() # 讀
    cv2.imshow("capture", frame) # 顯示
    if cv2.waitKey(100) & 0xFF == ord('q'): #鍵盤按鍵q,退出
        break