首頁  >  文章  >  後端開發  >  如何解決 OpenCV 中擷取緩衝區已滿導致的視訊擷取延遲問題?

如何解決 OpenCV 中擷取緩衝區已滿導致的視訊擷取延遲問題?

Barbara Streisand
Barbara Streisand原創
2024-11-05 15:31:02782瀏覽

How to Address Video Capture Lag Caused by a Full Capture Buffer in OpenCV?

由於擷取緩衝區導致視訊擷取延遲

問題

使用OpenCV 的VideoCapture 從網路攝影機擷取mjpeg 視訊串流可能會導致明顯的延遲,如果捕獲線程讀取幀的速率低於網路攝影機輸入的幀速率。這是由於捕獲緩衝區中的幀累積直至緩衝區被刷新所致。

OpenCV 解決方案

要手動刷新捕獲緩衝區,可以設定 VideoCapture 物件的 CV_CAP_PROP_BUFFERSIZE 屬性。這將限制內部緩衝區中儲存的幀數。但是,此選項僅支援某些後端硬體。

Hackaround 1

如果設定緩衝區大小無法解決問題,您可以使用 hackaround 技術。它涉及重複查詢幀,直到檢索幀所花費的時間超過特定閾值。如果檢索時間異常低,則表示該幀是從緩衝區取得的,應丟棄。

Hackaround 2

另一個 hackaround 解決方案是創建一個單獨的線程來連續抓取幀以高速保持捕獲緩衝區為空。該執行緒應使用 cv::VideoCapture.grab() 函數以避免抓取幀時的開銷。您可以使用同步技術來確保工作執行緒以受控方式從緩衝區讀取幀。

以上是如何解決 OpenCV 中擷取緩衝區已滿導致的視訊擷取延遲問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn