1. 程式人生 > >python-opencv使用攝像頭

python-opencv使用攝像頭

建立攝像頭物件

使用opencv自帶的VideoCapture()函式定義攝像頭物件,其引數0表示第一個攝像頭。

cap = cv2.VideoCapture(0)

這裡可以設定視訊播放的的大小,需要了解攝像頭支援的視訊大小。

cap.set(3, 960)
cap.set(4, 960)

當然也可以設定其他的引數(第一個引數就是圖中的值),具體參考下圖:

逐幀顯示實現視訊播放

在while迴圈中,利用攝像頭物件的read()函式讀取視訊的某幀,並顯示,然後等待1個單位時間,如果期間檢測到了鍵盤輸入q,則退出,即關閉視窗。

while(1):
    # get a frame
    ret, frame = cap.read()
    # show a frame
    cv2.imshow("capture", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

函式名:cap.read()

功 能:返回兩個值先返回一個布林值,如果視訊讀取正確,則為 True,如果錯誤,則為 False,也可用來判斷是否到視訊末尾 再返回一個值,為每一幀的影象,該值是一個三維矩陣。

通用接收方法為: ret,frame = cap.read(); 這樣 ret 儲存布林值,frame 儲存影象 若使用一個變數來接收兩個值,如 frame = cap.read() 則 frame 為一個元組,原來使用 frame 處需更改為 frame[1]

返回值:R1:布林值 R2:影象的三維矩陣

釋放攝像頭物件和視窗

呼叫release()釋放攝像頭,呼叫destroyAllWindows()關閉所有影象視窗。

cap.release()
cv2.destroyAllWindows() 

 程式碼

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, 960)
cap.set(4, 960)

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, frame = cap.read()
    # gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # cv2.imshow("Gray", gray)

    cv2.imshow("Capture_Test", frame)  # 視窗顯示,顯示名為 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))
        #儲存一幀圖片
        cv2.imwrite('1.jpg', frame)

    elif k == ord('q'):  # 若檢測到按鍵 ‘q’,退出
        break

cap.release()  # 釋放攝像頭
cv2.destroyAllWindows()  # 刪除建立的全部視窗

 

參考部落格

https://www.cnblogs.com/li134655/p/8732390.html

https://blog.csdn.net/huanglu_thu13/article/details/52337013