1、目标
- 打開攝像頭并捕獲照片
- 播放本地視訊,錄制視訊
- OpenCV函數:cv2.VideoCapture(), cv2.VideoWriter()
2、打開攝像頭
要使用攝像頭,需要使用cv2.VideoCapture(0)建立VideoCapture對象,參數0指的是攝像頭的編号,如果你電腦上有兩個攝像頭的話,通路第2個攝像頭就可以傳入1,依此類推。

capture.read()函數傳回的第1個參數ret(return value縮寫)是一個布爾值,表示目前這一幀是否擷取正确。cv2.cvtColor()用來轉換顔色,這裡将彩色圖轉成灰階圖。
另外,通過cap.get(propId)可以擷取攝像頭的一些屬性,比如捕獲的分辨率,亮度和對比度等。propId是從0~18的數字,代表不同的屬性,完整的屬性清單可以參考:VideoCaptureProperties(
http://t.cn/E5Zj6ZD)。也可以使用cap.set(propId,value)來修改屬性值。比如說,我們在while之前添加下面的代碼:
經驗之談:某些攝像頭設定分辨率等參數時會無效,因為它有固定的分辨率大小支援,一般可在攝像頭的資料頁中找到。
3、播放本地視訊
跟打開攝像頭一樣,如果把攝像頭的編号換成視訊的路徑就可以播放本地視訊了。回想一下cv2.waitKey(),它的參數表示暫停時間,是以這個值越大,視訊播放速度越慢,反之,播放速度越快,通常設定為25或30。
4、錄制視訊
之前我們儲存圖檔用的是cv2.imwrite(),要儲存視訊,我們需要建立一個VideoWriter的對象,需要給它傳入四個參數:
- 輸出的檔案名,如’output.avi’
- 編碼方式FourCC碼
- 幀率FPS
- 要儲存的分辨率大小
FourCC是用來指定視訊編碼方式的四位元組碼,所有的編碼可參考Video Codecs。如MJPG編碼可以這樣寫:
cv2.VideoWriter_fourcc(*'MJPG')或cv2.VideoWriter_fourcc('M','J','P','G')
6、小結
使用cv2.VideoCapture()建立視訊對象,然後在循環中一幀幀顯示圖像。參數傳入數字時,代表打開攝像頭,傳入本地視訊路徑時,表示播放本地視訊。
cap.get(propId)擷取視訊屬性,cap.set(propId,value)設定視訊屬性。
cv2.VideoWriter()建立視訊寫入對象,用來錄制、儲存視訊
7、練習
請先閱讀番外篇,然後實作一個可以拖動滑塊播放視訊的功能。(提示:需要用到 cv2.CAP_PROP_FRAME_COUNT和cv2.CAP_PROP_POS_FRAMES兩個屬性)。
引用
本節源碼
http://t.cn/E5ZRJDgVideo Codecs by FOURCC
http://t.cn/zOz0KsYGetting Started with Videos
http://t.cn/E5Z3uHM