python+opencv打開攝像頭,保存視頻、拍照功能的實現

本節主要學習的是經過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()#刪除創建的所有窗口
相關文章
相關標籤/搜索