opencv之視頻處理


視頻信號時由一系列的圖像構成的,這些圖像稱為幀,播放幀的速度稱為幀速率,通常使用幀/秒表示,

即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()

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM