本文探討了使用OpenCV 的VideoCapture 物件擷取影片時遇到的常見問題:由於視訊捕獲而導致的延遲緩衝。我們提供了來自 OpenCV 和 hackaround 的潛在解決方案。
根據 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>
如果OpenCV 解決方案失敗,我們可以採用基於測量檢索幀所需時間的破解方法。如果它太短,則該幀可能是從緩衝區中取出的,並且可以被丟棄。我們繼續查詢幀,直到時間超過閾值,表明幀是最新的。
另一個駭客方法涉及建立一個單獨的執行緒來高速連續抓取幀,使用cv::VideoCapture.grab(),保持緩衝區為空。主線程和附加線程之間的同步可以使用自旋鎖來實現。
雖然 OpenCV 提供了緩衝區大小設置,但其可用性在某些後端受到限制。所提出的破解方法提供了減輕緩衝區延遲的替代方法,使開發人員能夠以更少的延遲擷取影片。最佳解決方案可能會根據系統和應用程式要求而有所不同。
以上是使用 OpenCV 的 VideoCapture 擷取影片時如何減少緩衝區延遲?的詳細內容。更多資訊請關注PHP中文網其他相關文章!