對於我正在開發的計算機視覺項目,我需要使用Logitech C920攝像頭抓取圖像。我使用OpenCV的VideoCapture來做到這一點,但是我面臨的問題是,我在某個時刻拍攝的圖像沒有顯示相機看到的最新內容。也就是說,如果我在時間戳t處拍攝一張圖像,它可以顯示相機在時間戳(t-delta)處看到的內容。抓取新攝像頭圖像時的OpenCV VideoCapture/V4L2延遲
我這樣做是通過編寫一個遞增計數器並將其顯示在屏幕上的程序來完成的。我將相機指向屏幕並進行錄製。當計數器達到某個值時,比如說10000,它會抓取一個圖像並將其保存爲文件名「counter_value.png」(例如10000.png)。這樣我就可以將計數器的當前值與攝像機看到的當前值進行比較。我注意到大多數時候延遲大約是4-5幀,但它不是一個固定值。
我看到類似的帖子關於這個問題,但沒有一個真正的幫助。有些人建議將幀抓取程序放入單獨的線程並更新「current_frame」Mat變量。我嘗試過,但由於某種原因,問題仍然存在。其他人提到,相機在Windows上運行良好(但我需要使用Linux,但)。我試着在Windows上運行相同的代碼,實際上延遲只有大約1幀(這可能是因爲屏幕沒有足夠快地更新,相機沒有看到計數器)。
然後,我決定只使用V4L2代碼運行一個簡單的攝像頭查看器,認爲這個問題可能來自OpenCV。我再次經歷了同樣的延遲,這使我相信驅動程序正在使用某種緩衝區來緩存圖像。
我是新來V4L2,我真的需要儘快解決這個問題,所以我的問題,你們是:
- 有沒有人發現,爲獲得使用V4L2最新的圖像解決方案(和也許是OpenCV)?
- 如果沒有辦法使用V4L2來解決它,那麼有沒有人知道在Linux上解決這個問題的另一種方法?
問候,
米哈伊