我們上一篇博文中提到了從攝像頭中獲取到了視頻數據(Python OpenCV使用攝像頭捕獲視頻),對於視頻的獲取,我們使用了OpenCV中的VideoCapture類的read()方法,該方法返回兩個結果,第一個結果表示幀讀取是否成功,是個布爾值;第二個結果返回讀取幀的圖像信息。下面,我們來進一步演示如何播放我們讀取到的視頻幀信息。
【播放視頻原理解釋】
我們知道,從攝像頭中捕獲的每一幀的圖像信息是通過獲取每一幀的圖像來實現的。
在播放視頻時,我們可以利用同樣的原理,在讀取視頻每一幀圖像時,使用 cv2.waiKey() 函數,在函數中傳入具體的毫秒數據,用以設置適當的持續時間。我們知道,如果cv2.waitKey()函數中參數設置得太低,則視頻就會播放的非常快,如果設置得太高就會播放的很慢(你可以使用這種方法控制視頻的播放速度)。因此,在使用OpenCV來播放視頻時,我們使用waitKey()傳參的方式來實現響應的效果。下面,我們來看下演示代碼。
【如何保存獲取的視頻幀信息】
對於圖像來說,我們使用 cv2.imwrite()即可保存一幅圖像。然而,從攝像頭中獲取到視頻內容後,我們需要處理的信息維度會有所增加。除了需要知道保存的視頻名稱,我們還需要知道保存的視頻編碼格式(不知道的自行百度),視頻是否為彩色。這些信息,都被封裝在了cv2.VideoWriter類中。
使用方法:cv2.VideoWriter(videoName, fourCC, fps, (frame_width, frame_height), isColor)
videoName:傳入保存視頻文件的名稱
fourCC:指定視頻文件的編碼格式,fourCC是一個4位元組碼,用來確定視頻編碼格式。
常見傳入參數為:
'I420':YUV編碼類型,文件名後綴為.avi
'PIMI':MPEG-1編碼類型,文件名後綴為.avi
'XVID':MPEG-4編碼類型,文件名後綴為.avi
'THEO':Ogg Vorbis,文件名後綴為.ogv
'FLV1':Flash視頻,文件名後綴為.flv
各個系統常見支持編碼格式如下:
Fedora: DIVX, XVID, MJPG, X264, WMV1, WMV2. Windows:DIVX
對於編碼的使用方法如下:
首先定義好編碼,以XVID編碼格式為例:
fourcc = cv2.VideoWriter_fourcc(*'XVID')
或者是fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')
然後將fourcc傳入到VideoWriter對象參數中即可。
fps:幀速率。
frame_width:視頻中圖像的寬度
frame_height:視頻中圖像的高度
isColor:是否是彩色,是個布爾值,默認為True。
【實時獲取內置攝像頭視頻並保存】
下面我們來演示一下這個用法,從攝像頭中逐幀讀取視頻信息,然後將視頻沿水平方向旋轉(視頻倒過來顯示)每一幀並保存在本地,演示代碼如下圖所示。
程序成功運行,持續獲取視頻信息並保存在本地。我的攝像頭是前置攝像頭,由於本人長的比較嚇人,就不展示了。大家可以在自己的筆記本上試試看。
【總結】
OpenCV是個強大的視覺處理庫,它不僅提供了圖像應用的各種處理算法,對於視頻處理它的功能也是很全面的,在視頻處理中其基本思想還是逐幀獲取圖像並處理相應的圖像內容。因此,在圖像處理功能強大的基礎上構建一系列視頻處理內容,也是得心應手的,感興趣的朋友們對於這個庫的學習,應該不能錯過。歡迎持續關注,後續內容更加精彩哦。
轉載請註明出處,百家號:Python高手養成