基于Python的OpenCV基礎入門——視頻的處理
- 視頻
- OpenCV視頻處理操作:
- 創建視頻對象
- 判斷視頻是否成功初始化
- 讀取視頻幀
- 獲取視頻特征
- 設置視頻參數
- 聲明編碼器
- 保存視頻
- 釋放視頻對象
- 視頻處理基本操作的代碼實現:
視頻
視頻是由一系列連續的圖像幀組成的。每一幀都是視頻中的一張靜止圖像,它們以非常快的速度連續播放,給人一種連續運動的感覺。視頻的幀率指的是每秒鐘播放的幀數,常見的幀率有24幀/秒、30幀/秒和60幀/秒等。幀率越高,視頻播放越流暢。視頻的處理就是通過循環將視頻流中的所有的幀進行處理
OpenCV視頻處理操作:
創建視頻對象
cap = cv2.VideoCapture(value)
參數:
設備索引或者一個視頻文件名。攝像頭讀取則是設備索引,0為默認攝像頭;視頻文件讀取則為filename
判斷視頻是否成功初始化
ret = cap.isOpened()
返回值:
ret :bool類型,成功則為True,否則為False。
讀取視頻幀
ret, frame = video.read()
返回值:
ret:bool類型,判斷是否讀取到幀,成功為True,否則為False。
frame:讀取到的幀
獲取視頻特征
cap.get(propId)
參數:
propId : 0 到 18 之間的整數。每一個數代表視頻的一個屬性,在這里僅舉幾個常用的參數:
int | 屬性 | propld |
---|---|---|
0 | 視頻文件的當前位置(毫秒) | CV_CAP_PROP_POS_FRAMES |
1 | 下一步要解碼/捕獲的幀的基于0的索引 | CV_CAP_PROP_POS_AVI_RATIO |
3 | 視頻流中幀的寬度 | CV_CAP_PROP_FRAME_HEIGHT |
4 | 視頻流中幀的高度 | CV_CAP_PROP_FPS |
5 | 幀率 | CV_CAP_PROP_FOURCC |
設置視頻參數
cap.set(propId, value)
參數:
propId : 0 到 18 之間的整數
value:設置的新值
聲明編碼器
fourcc = cv2.VideoWriter_fourcc(‘M’, ‘P’, ‘4’, ‘V’ ) , FourCC 是用于指定視頻解碼器的 4 字節代碼。
參數 | 說明 |
---|---|
‘M’, ‘P’, ‘4’, ‘V’ | MPEG-4編碼類型,文件擴展名為 .mp4 |
‘X’,‘2’,‘6’,‘4’ | MPEG-4編碼類型,文件擴展名為.mp4 |
‘P’,‘I’,‘M’,‘I’ | MPEG-1編碼類型,文件擴展名為.avi |
‘X’, ‘V’, ‘I’, ‘D’ | MPEG-4編碼類型,文件擴展名為.avi |
‘I’, ‘4’, ‘2’, ‘0’ | YUV編碼類型,文件擴展名為avi |
保存視頻
out = cv2.VideoWriter(filename,fourcc, fps, frameSize)
參數:
filename:視頻保存的位置
fourcc:指定視頻編解碼器的4字節代碼
fps:幀率
frameSize:幀大小
釋放視頻對象
capture.release(),釋放視頻對象是必要的清理操作
視頻處理基本操作的代碼實現:
import cv2cap = cv2.VideoCapture('img/1.mp4')while(cap.isOpened()):ret, frame = cap.read()if ret == True:cv2.imshow('frame', frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakelse:break
實現效果如下圖: