首頁 >後端開發 >C++ >為什麼我的 OpenCV VideoCapture 滯後,如何修復?

為什麼我的 OpenCV VideoCapture 滯後,如何修復?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-05 17:40:02869瀏覽

Why is My OpenCV VideoCapture Lagging, and How Can I Fix It?

由於捕獲緩衝區導致OpenCV VideoCapture 延遲

由於捕獲緩衝區,透過網路攝影機擷取視訊可能會出現延遲,其中幀在讀取之前被儲存。當讀取幀的速率低於捕獲幀的速率時,就會出現此問題,從而導致緩衝區中的幀累積。

OpenCV 解決方案

在OpenCV 中,您可以使用CV_CAP_PROP_BUFFERSIZE 設定VideoCapture 物件的緩衝區大小:

<code class="cpp">cv::VideoCapture cap;
cap.set(CV_CAP_PROP_BUFFERSIZE, 3); // Store only 3 frames in the buffer</code>

如果OpenCV 解決方案沒有不起作用,您可以使用以下技巧:

  1. 測量從緩衝區查詢幀所需的時間。
  2. 如果時間很短,則按原樣丟棄該幀從緩衝區讀取。
  3. 繼續查詢幀,直到時間超過限制,表示緩衝區為空,下一幀是最新的。

Hackaround 2

另一種破解方法涉及使用第三個執行緒高速連續抓取影格以保持緩衝區為空:

  1. 建立第三個執行緒呼叫cv:: VideoCapture.grab() 取得幀。
  2. 使用自旋鎖在工作執行緒和第三執行緒之間同步讀取影格。

以上是為什麼我的 OpenCV VideoCapture 滯後,如何修復?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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