Opencv for Python 學習筆記 2.1 攝像頭
阿新 • • 發佈:2019-01-01
這段時間一直耽擱著,沒多少時間靜下心來學習,這兩節的早就寫好了,一直沒有上傳,這樣可不好,勇敢的騷年啊,努力追逐 PY 的美好世界吧!!
本節主要學習的是通過
.VideoCapture()
呼叫攝像頭讀取影象資料,以及使用
cap.set( propId , value )
cap.get( propId )
獲取或者更改視訊屬性。
其中,propId 的值為 0 - 18,19個值並不是每個都可以進行修改,每個值對應的屬性以及功能如下如下:
引數 | 值 | 功能/意義 |
---|---|---|
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()#刪除建立的全部視窗