這篇介紹如何透過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 官網說明
https://www.facebook.com/arbu00/
Scan QRcode to join FB Fans.