2020/6/8

cv2.VideoCapture() in Windows

簡單的測試 code;
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)
...

沒有留言:

張貼留言