1. 程式人生 > >Opencv for Python 學習筆記 2.1 攝像頭

Opencv for Python 學習筆記 2.1 攝像頭

這段時間一直耽擱著,沒多少時間靜下心來學習,這兩節的早就寫好了,一直沒有上傳,這樣可不好,勇敢的騷年啊,努力追逐 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()#刪除建立的全部視窗