使用OpenCV 的VideoCapture 從網路攝影機擷取mjpeg 視訊串流可能會導致明顯的延遲,如果捕獲線程讀取幀的速率低於網路攝影機輸入的幀速率。這是由於捕獲緩衝區中的幀累積直至緩衝區被刷新所致。
要手動刷新捕獲緩衝區,可以設定 VideoCapture 物件的 CV_CAP_PROP_BUFFERSIZE 屬性。這將限制內部緩衝區中儲存的幀數。但是,此選項僅支援某些後端硬體。
如果設定緩衝區大小無法解決問題,您可以使用 hackaround 技術。它涉及重複查詢幀,直到檢索幀所花費的時間超過特定閾值。如果檢索時間異常低,則表示該幀是從緩衝區取得的,應丟棄。
另一個 hackaround 解決方案是創建一個單獨的線程來連續抓取幀以高速保持捕獲緩衝區為空。該執行緒應使用 cv::VideoCapture.grab() 函數以避免抓取幀時的開銷。您可以使用同步技術來確保工作執行緒以受控方式從緩衝區讀取幀。
以上是如何解決 OpenCV 中擷取緩衝區已滿導致的視訊擷取延遲問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!