2016年10月21日 星期五

OPENCV(2)--Capture Video from Camera


    這篇介紹如何透過OPENCV 開啟電腦上的Webcam 擷取影像並做灰階化後及時同步顯示影像. 
     video可以看成是一段時間內幾十張單一影像的連續呈現,如30FPS(Frames per second) 就是每秒30張影像,因為人眼視覺暫留的作用,所以在我們看起來它就變成了動畫.所以camera擷取進的影像也是一張一張的圖片,而我們也可以直接對這一張張的影像圖片連續做處裡如灰階化.所以在OPENCV處理video的影像跟單一張圖片的影像並沒有區別.
     底下圖(1) 左邊即為webcam讀取的原始影像,右邊為灰階化後的即時影像

<圖1>



從程式碼中觀看,frame即為從webcam 讀取的單張影像,而只要連續對讀取的frame做處理即可
顯示即時處理後的影像結果.當然電腦的CPU/GPU處理的速度,會直接影響處理效率.
一般使用預設的的640x480 來做處理即可,即使未來對影像特徵值得處理也不需太高解析度的影像,甚至更小解析度32x32 就夠了.

     要在OPENCV裡使用Webcam 只要底下一行程式即可
     預設電腦的webcam 代號0
     cap = cv2.VideoCapture(0)


     如果是要打開已存在的影像檔xxxx.avi,則可改為下列程式
     cap = cv2.VideoCapture('xxxx.avi')

     將影像作灰階化也很簡單,只要使用cv2.cvtColor 函數可以將影像格式做轉換
     如底下COLOR_BGR2GRAY 參數即是把原始影像BGR 格式轉成GRAY
     gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
     gray 即為灰階化後產生新的影像矩陣
     注意:OPENCV 讀進來的影像格式預設為BGR 不是常見的RGB ,差別只是R,B 排列不同
    要將BGR 轉成RGB ,可以利用以下參數
     RGB= cv2.cvtColor(frame, cv2.COLOR_BGR2RGB )
     RGB即為RGB化後產生新的影像矩陣

     有關更多影像轉換參數可參考OPENCV 官網

如果想要改變影像擷取的解析度,可以使用cap.set(propId, value) 
例如底下範例可以可以改變解析度為1024X768,但是實際可用的解析度會受使用的camera影響
意即並非所有解析度都可以用
#ret = cap.set(3,1024)             ##Default is 640X480
#ret = cap.set(4,768)               ##change to 1024X768
P.S  # 為Python 語言的註解,如同C/C++ 的//
有關propId 參數更多介紹請看 OPENCV 官網說明

import numpy as np
import cv2
#打開預設webcam 代號0
cap = cv2.VideoCapture(0)
#打開已存在的影像檔xxxx.avi
#cap = cv2.VideoCapture('xxxx.avi')

#改變解析度為1024X768
#ret = cap.set(3,1024)             ##Default is 640X480
#ret = cap.set(4,768)             ##change to 1024X768
while(True):
    # Capture frame-by-frame
    #ret 為迴傳的status 為true or false ,讀取成功回傳true ,fram 為讀取的單張影像
    ret, frame = cap.read()          ##ret =true or false. 
 
    # 將讀取的影像(frame)灰階化得到gray影像
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # Display the resulting frame
    cv2.imshow('Frame',frame)
    cv2.imshow('Gray',gray)
    #按esc鍵結束
    if cv2.waitKey(1) & 0xFF == 27:    ##ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()




加入阿布拉機的3D列印與機器人的FB專頁
https://www.facebook.com/arbu00/


Scan QRcode to join FB Fans.