import cv2 cap = cv2.VideoCapture(0) ret, frame = cap.read() print(ret) print(frame) cv2.release()其中 cv2.VideoCapture(0) 的 0, 就是機器上的 camera index,有幾個 camera,就用 0, 1, 2 來選。
只是不知道那一個 index 是那一個 camera..
這樣的 code,在 run 完後會出現一個 Warning:
[WARN:0] terminating async callback這個只有在 windows 上才會有。
google 說,在VideoCapture 加上 option:
cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)說明使用 directshow 裝置。舊可以消除。
另外,在 windows 系統上,取得 VideoCapture 後,前幾個 read( ) 到的 frame 都是 黑或是灰(16) 的內容…
好像跟 camera 有關,使用nb 內建的 camera,比較不會出現這個問題。
使用外接的 usb camera,不同的camera,第一個影像出現的時間會不一樣。
跟 cpu 的速度也有關係。
* 2022/02/23 update
Linux 系統也一樣,其實是 camera (capture) 有關。
有些 hdmi usb capture 裝置,程式開啟裝置後,都要等 0.5 sec,有些不用。
所以 safe 的作法 (要take snapshot 的話)。 delay 1s:
import cv2 import time cap = cv2.VideoCapture(2) time.sleep(1) ret, frame = cap.read() cv2.imshow('ff',frame) cv2.imsave("abc.jpg",frame) ...
沒有留言:
張貼留言