首頁 >後端開發 >C++ >使用 OpenCV 的 VideoCapture 擷取影片時如何減少緩衝區延遲?

使用 OpenCV 的 VideoCapture 擷取影片時如何減少緩衝區延遲?

Barbara Streisand
Barbara Streisand原創
2024-11-07 09:57:02490瀏覽

How Can I Reduce Buffer Lag When Capturing Video with OpenCV's VideoCapture?

OpenCV VideoCapture 中的緩衝區延遲

簡介

本文探討了使用OpenCV 的VideoCapture 物件擷取影片時遇到的常見問題:由於視訊捕獲而導致的延遲緩衝。我們提供了來自 OpenCV 和 hackaround 的潛在解決方案。

OpenCV 解決方案

根據 OpenCV 文檔,可以設定捕獲緩衝區大小。但是,此功能僅適用於 DC1394 v2.x 後端。

<code class="cpp">cv::VideoCapture cap;
cap.set(CV_CAP_PROP_BUFFERSIZE, 3);</code>

在OpenCV 3.4 及更高版本中,該限制似乎已被刪除:

<code class="cpp">cv::VideoCapture cap;
cap.set(cv::CAP_PROP_BUFFERSIZE, 3);</code>

Hackaround 1

如果OpenCV 解決方案失敗,我們可以採用基於測量檢索幀所需時間的破解方法。如果它太短,則該幀可能是從緩衝區中取出的,並且可以被丟棄。我們繼續查詢幀,直到時間超過閾值,表明幀是最新的。

駭客方法 2

另一個駭客方法涉及建立一個單獨的執行緒來高速連續抓取幀,使用cv::VideoCapture.grab(),保持緩衝區為空。主線程和附加線程之間的同步可以使用自旋鎖來實現。

結論

雖然 OpenCV 提供了緩衝區大小設置,但其可用性在某些後端受到限制。所提出的破解方法提供了減輕緩衝區延遲的替代方法,使開發人員能夠以更少的延遲擷取影片。最佳解決方案可能會根據系統和應用程式要求而有所不同。

以上是使用 OpenCV 的 VideoCapture 擷取影片時如何減少緩衝區延遲?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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