1. 程式人生 > >Python-opencv攝像頭影象捕獲

Python-opencv攝像頭影象捕獲

例項一 (灰色排程)

#!/usr/bin/env python
# _*_ coding:utf-8 _*_

import cv2 as cv
import numpy as np


capture = cv.VideoCapture(0)                        # 建立一個VideoCapture物件
while(True):
    ret, frame = capture.read()                     # 一幀一幀讀取視訊
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)    # 對每一幀做處理,設定為灰度圖
    cv.imshow('frame', gray)  # 顯示結果
    if cv.waitKey(1) &0xFF == ord('q'):             # 按q停止
        break

capture.release()                                   # 釋放cap,銷燬視窗
cv.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()  # 刪除建立的全部視窗

例項三 (影象抓取,儲存為圖片)

#!/usr/bin/env python  
# -*- coding: utf-8 -*-  

from VideoCapture import Device  
import time  

#最多儲存5張抓取到的圖片,超過5張,覆蓋最早的那一張,依次迴圈  
MAX_PIC_NUM = 5  

#抓取頻率,30秒抓取一次  
SLEEP_TIME_LONG = 30  

#初始化攝像頭  
cam = Device(devnum=0, showVideoWindow=0)  

iNum = 0  
while True:  
  
    #抓圖  
    cam.saveSnapshot(str(iNum)+ '.jpg', timestamp=3, boldfont=1, quality=75)  
  
    #休眠一下,等待一分鐘  
    time.sleep(SLEEP_TIME_LONG)  
  
    #超過5張,則覆蓋之前的,否則,硬碟很快就會寫滿  
    if iNum == MAX_PIC_NUM:  
        iNum = 0  
    else:  
        iNum += 1
        

例項四 (人臉識別,模糊)