視頻信號時由一系列的圖像構成的,這些圖像稱為幀,播放幀的速度稱為幀速率,通常使用幀/秒表示,
即FPS(Frames Per Second),每秒出現的幀數
OpenCv提供cv2.VideoCapture()類來處理視頻,
函數形式
捕獲對象 = cv2.VideoCapture("攝像頭ID號或者視頻文件")
攝像頭ID號,是攝像頭的ID編號,若為-1則隨即選取一個攝像頭,若由多個攝像頭則可以用數字“0“或者”1“、
捕獲對象為cv2.VideoCapture()類的對象
函數 retval = cv2.VideoCapture.isOpened()
該函數判斷當前攝像頭是否初始化成功
retval即是布爾值表示是否初始化成功
若攝像頭初始化失敗可用函數打開
retval = cv2.VideoCapture.open(index)
index為攝像頭的ID號 ,
retval為布爾值,表示是否成功
若在處理視頻文件,則語法格式為
retval = cv2.VideoCapture.open(filename)
初始化成功后,捕獲幀的函數
retval , image = cv2.VideoCapture.read()
image為捕獲到的幀
retval 布爾值表示是否捕獲成功
釋放,在不需要攝像頭時,要關閉攝像頭,
None = cv2.VideoCapture.release()
屬性設置
如果需要獲取類對象的屬性,或是更改類對象的屬性,
函數 retval = cv2.VideoCapture.get(propId),
propId對象類對象的屬性,
如果設置對象屬性則
retval = cv2.VideoCapture.set( peopId , value)
value 對應屬性propId的值
propId | 含義及值 |
---|---|
cv2.VideoCapture.get(0) | CV_CAP_PROP_POS_MSEC 視頻文件的當前位置(播放)以毫秒為單位 |
cv2.VideoCapture.get(1) | CV_CAP_PROP_POS_FRAMES 基於以0開始的被捕獲或解碼的幀索引 |
cv2.VideoCapture.get(2) | CV_CAP_PROP_POS_AVI_RATIO 視頻文件的相對位置(播放):0=視頻開始,1=視頻的結尾。 |
cv2.VideoCapture.get(3) | CV_CAP_PROP_FRAME_WIDTH 在視頻流的幀的寬度 |
cv2.VideoCapture.get(4) | CV_CAP_PROP_FRAME_HEIGHT 在視頻流的幀的高度 |
cv2.VideoCapture.get(5) | CV_CAP_PROP_FPS 幀速率 |
cv2.VideoCapture.get(6) | CV_CAP_PROP_FOURCC 編解碼的4字-字符代碼 |
cv2.VideoCapture.get(7) | CV_CAP_PROP_FRAME_COUNT 視頻文件中的幀數 |
cv2.VideoCapture.get(8) | CV_CAP_PROP_FORMAT 返回對象的格式(返回的Mat格式的對象) |
cv2.VideoCapture.get(9) | CV_CAP_PROP_MODE 返回后端特定的值,該值指示當前捕獲模式 |
cv2.VideoCapture.get(10) | CV_CAP_PROP_BRIGHTNESS 圖像的亮度(僅適用於照相機) |
cv2.VideoCapture.get(11) | CV_CAP_PROP_CONTRAST 圖像的對比度(僅適用於照相機) |
cv2.VideoCapture.get(12) | CV_CAP_PROP_SATURATION 圖像的飽和度(僅適用於照相機) |
cv2.VideoCapture.get(13) | CV_CAP_PROP_HUE 色調圖像(僅適用於照相機) |
cv2.VideoCapture.get(14) | CV_CAP_PROP_GAIN 圖像增益(僅適用於照相機)(Gain在攝影中表示白平衡提升) |
cv2.VideoCapture.get(15) | CV_CAP_PROP_EXPOSURE 曝光(僅適用於照相機) |
cv2.VideoCapture.get(16) | CV_CAP_PROP_CONVERT_RGB 指示是否應將圖像轉換為RGB布爾標志 |
cv2.VideoCapture.get(17) | CV_CAP_PROP_WHITE_BALANCE × 暫時不支持 |
cv2.VideoCapture.get(18) | CV_CAP_PROP_RECTIFICATION 立體攝像機的矯正標注(目前只有DC1394 v.2.x后端支持這個功能) |
還有一些未列出請自行查閱
1 import cv2 2 import numpy as np 3 cap = cv2.VideoCapture(1) 4 while(cap.isOpened()): 5 ret , frame = cap.read() 6 cv2.imshow('frame',frame) 7 c = cv2.waitKey(1) 8 if c == 27: 9 break 10 cap.release()
這里截取了一張圖像
OpenCv中的cv2.VideoWriter類可以將圖片序列保存成視頻文件,也可以修改視頻的各種屬性,
函數形式
<VIdeoWriter object> = cv2.VideoWriter( filename , fourcc , fps , framsize [, isColor])
filename指定輸出目標視頻的存放路徑和文件名,如果已經存在,則會覆蓋
fourcc表示視頻編/解碼類型, 使用函數cv2.VIdeoWriter_fourcc()來指定視頻編碼格式,有4個字符參數,
每一個編/解碼器都有這樣的標記,列出幾個常用的
注意:字符順序不能弄混
#cv2.VideoWriter_fourcc('I', '4', '2', '0'),該參數表示未壓縮的YUV顏色編碼格式,色度子采樣為4:2:0.
該編碼格式具有較好的兼容性,但產生文件較大,文件名后綴為.avi
#cv2.VideoWriter_fourcc('P', 'I', 'M', 'I'),該參數是MPEG-1編碼類型,文件名后綴為.avi
#cv2.VideoWriter_fourcc('X', 'V', 'I', 'D'),該參數是MPEG-4編碼類型,如果希望視頻大小為平均值則可以選用,
文件名后綴為.avi
#cv2.VideoWriter_fourcc('T', 'H', 'E', 'O'),該參數是Ogg Vorbis,文件名后綴為.ogv
#cv2.VideoWriter_fourcc('F', 'L', 'V', '1'),該參數是Flash視頻,文件名后綴為.flv
也可以用如下表示
fourcc = cv2.VideoWriter_fourcc(*'I420')
fps幀速率
framsize每一幀的長和寬
isColor表示是否為彩色圖像
如有
out = cv2.VideoWriter( 'output.avi' , fourcc , 20 , ( 1024 , 768))
None = cv2.VideoWriter(frame)
用於寫入下一幀視頻,通常情況下要求寫入的圖像格式為BGR格式,
如上式中 cv2.VideoWriter類 out
out.write(frame) , 存入名為output.avi
釋放
None = cv2.VideoWriter.release()
out.release()
1 import cv2 2 import numpy as np 3 cap = cv2.VideoCapture(0) 4 fourcc = cv2.VideoWriter_fourcc(*'I420') 5 out = cv2.VideoWriter('output.avi',fourcc,20,(640,480)) 6 while(cap.isOpened()): 7 ret , frame = cap.read() 8 cv2.imshow('frame',frame) 9 if ret == True : 10 out.write(frame) 11 cv2.imshow('frame',frame) 12 if cv2.waitKey(1) == 27: 13 break 14 else: 15 break 16 cap.release() 17 out.release() 18 cv2.destroyAllWindows()
視頻操作基礎
1 import cv2 2 import numpy as np 3 cap = cv2.VideoCapture(0) 4 while(cap.isOpened()): 5 ret , frame = cap.read() 6 frame = cv2.Canny(frame , 100 , 200 ) 7 cv2.imshow('frame' , frame) 8 c = cv2.waitKey(1) 9 if c == 27: 10 break 11 cap.release() 12 cv2.destroyAllWindows()