本節主要學習的是經過python
.VideoCapture()web
調用攝像頭讀取圖像數據,以及使用後端
cap.set( propId , value )
cap.get( propId )app
獲取或者更改視頻屬性。
其中,propId 的值爲 0 - 18,19個值並非每一個均可以進行修改,每一個值對應的屬性以及功能以下以下:ide
參數 | 值 | 功能/意義 |
---|---|---|
CV_CAP_PROP_POS_MSEC | 0 | 視頻文件的當前位置(以毫秒爲單位)或視頻捕獲時間戳。 |
CV_CAP_PROP_POS_FRAMES | 1 | 基於0的索引將被解碼/捕獲下一幀。 |
CV_CAP_PROP_POS_AVI_RATIO | 2 | 視頻文件的相對位置:0 - 電影的開始,電影的1 - 結束。 |
CV_CAP_PROP_FRAME_WIDTH | 3 | 視頻每一幀的寬。 |
CV_CAP_PROP_FRAME_HEIGHT | 4 | 視頻每一幀的高。 |
CV_CAP_PROP_FPS | 5 | 視頻的幀速。 |
CV_CAP_PROP_FOURCC | 6 | 4個字符表示的視頻編碼器格式。 |
CV_CAP_PROP_FRAME_COUNT | 7 | 視頻的幀數。 |
CV_CAP_PROP_FORMAT | 8 | byretrieve()返回的Mat對象的格式。 |
CV_CAP_PROP_MODE | 9 | 指示當前捕獲模式的後端特定值。 |
CV_CAP_PROP_BRIGHTNESS | 10 | 圖像的亮度(僅適用於相機)。 |
CV_CAP_PROP_CONTRAST | 11 | 圖像對比度(僅適用於相機)。 |
CV_CAP_PROP_SATURATION | 12 | 圖像的飽和度(僅適用於相機)。 |
CV_CAP_PROP_HUE | 13 | 圖像的色相(僅適用於相機)。 |
CV_CAP_PROP_GAIN | 14 | 圖像的增益(僅適用於相機)。 |
CV_CAP_PROP_EXPOSURE | 15 | 曝光(僅適用於相機)。 |
CV_CAP_PROP_CONVERT_RGB | 16 | 表示圖像是否應轉換爲RGB的布爾標誌。 |
CV_CAP_PROP_WHITE_BALANCE | 17 | 目前不支持 |
CV_CAP_PROP_RECTIFICATION | 18 | 立體攝像機的整流標誌(注意:只有當前支持DC1394 v 2.x後端) |
代碼以下:函數
#coding:utf-8 import cv2 import numpy as np """ 函數名:cv2.VideoCapture() 功 能:經過攝像頭捕獲實時圖像數據 返回值:有 參數一:攝像頭代號,0爲默認攝像頭,筆記本內建攝像頭通常爲 0 或者填寫視頻名稱直接加載本地視頻文件 """ cap = cv2.VideoCapture(0)#建立一個 VideoCapture 對象 """ 函數名:cap.set( propId , value ) 功 能:設置視頻參數。 設置視頻的寬高值和攝像頭有關 使用筆記本內置攝像頭時只能設置爲 1280*720 以及 640*480,哪怕設置值不一樣時都會自動校訂過來,而且仍然返回 True 返回值:布爾值 參數一:須要設置的視頻參數 參數二:設置的參數值 """ cap.set(3,480) cap.set(4,320) flag = 1;#設置一個標誌,用來輸出視頻信息 """ 函數名:cv2.isOpened() 功 能:返回一個布爾值( True / False ),檢查是否初始化成功,成功返回 True 返回值:布爾值 """ while(cap.isOpened()):#循環讀取每一幀 """ 函數名:cap.read() 功 能:返回兩個值 先返回一個布爾值,若是視頻讀取正確,則爲 True,若是錯誤,則爲 False,也可用來判斷是否到視頻末尾 再返回一個值,爲每一幀的圖像,該值是一個三維矩陣 通用接收方法爲: ret,frame = cap.read(); 這樣 ret 存儲布爾值,frame 存儲圖像 若使用一個變量來接收兩個值,如 frame = cap.read() 則 frame 爲一個元組,原來使用 frame 處需更改成 frame[1] 返回值:R1:布爾值 R2:圖像的三維矩陣 """ ret_flag , Vshow = cap.read() #gray = cv2.cvtColor(Vshow,cv2.COLOR_BGR2GRAY) #cv2.imshow("Gray",gray) cv2.imshow("Capture_Test",Vshow) #窗口顯示,顯示名爲 Capture_Test k = cv2.waitKey(1) & 0xFF #每幀數據延時 1ms,延時不能爲 0,不然讀取的結果會是靜態幀 if k == ord('s'): #若檢測到按鍵 ‘s’,打印字符串 """ 函數名:cap.get( propId ) 功 能:查詢視頻的參數 返回值:無 參數一:查詢的視頻參數,其中部分值可使用 cap.set() 進行修改 """ print(cap.get(3)); print(cap.get(4)); elif k == ord('q'): #若檢測到按鍵 ‘q’,退出 break cap.release() #釋放攝像頭 cv2.destroyAllWindows()#刪除創建的所有窗口