OpenCV 影像串流 (python)
Posted On 2021 年 8 月 28 日
透過 OpenCV 的介面,顯示網路攝影機 ( webcam ) 所拍攝到的即時影像。
首先我們要先安裝 Python 版的 OpenCV
程式的一開始先透過 cv2.VideoCapture 指定攝影機,筆電上 0 通常代表內建的攝影機,1 是外接的。
透過 set() 可以設定拍攝的一些基本參數,如長、寬、幀數 ( Frames ) 等等。
set 有兩個參數,第一個是要設定的項目,第二個是該項目要設定的參數。
本隻程式僅使用了 3 個,如下表所示,其他更多參數請參考文件檔 。
參數 | 參數代碼 | 本程式使用之參數 |
cv.CAP_PROP_FRAME_WIDTH | 3 | 160 |
cv.CAP_PROP_FRAME_HEIGHT | 4 | 120 |
cv.CAP_PROP_FPS | 5 | 30 |
isOpened() 可以檢測攝影機是否正常打開,如果沒有成功打開就結束程式。
透過 while 迴圈,不斷的讀取影像,以產生串流的感覺 ( 把 while 迴圈拿掉可以變成單純的圖片拍攝 ) , 透過 waitKey() 可以終止串流。
read() 會讀取一張影像,ret 代表是否取得成功,frame 為取得的影像。
imshow() 可以顯示影像,第一個參數為視窗的名子,第二個參數為影像。
( 注意 : 只要使用 imshow 後面一定要有 waitKey() 才能正確顯示,可以參考下方連結 )
結束時也記得把攝影機、剛剛建立的視窗釋放掉。
import cv2 cap = cv2.VideoCapture(0) cap.set(3,160) cap.set(4,120) cap.set(cv2.CAP_PROP_FPS, 30) if not cap.isOpened(): print("Can't open camera !") exit() while(True): ret, frame = cap.read() if not ret: print("Can't receive frame") break cv2.imshow('frame', frame) if cv2.waitKey(1) == ord('q'): break cap.release() cv2.destroyAllWindows()
結果如下所示