2017-06-14 37 views
0

我想用Qt和opencv開發一個應用程序,以便處理來自相機的所有幀。 我有2個Q線程,一個用於捕獲圖像,另一個用於處理。 處理線程有點慢,所以爲了處理所有的幀,我需要一個幀緩衝區。 我真的不知道如何簡單地推動幀緩衝區。 任何幫助將會有所瞭解。用於視頻處理的圖像緩衝區

+1

鑑於單個處理線程無法跟上捕獲速率,您可能需要多個處理線程。這看起來像是一個單生產者 - 多用戶設置的經典候選人。 –

回答

0

如果你的處理線程比幀捕捉週期慢,這意味着你的代碼最終會失去內存。您應該考慮降低捕獲幀速率,丟幀或降低幀分辨率。

至於緩衝劑,去一個線程安全圓形隊列爲幀,其中,所述捕獲線程將是生產和處理線程將是消費者。如果隊列已滿(很明顯),您有兩種選擇:(1)刪除最早的(但未處理的)一個並添加新的。 (2)只需刪除最新的框架,這很容易實現。

2

你會想創建你的線程異步運行。捕獲圖像時,使用捕獲線程將其添加到std::queue,然後讓您的處理線程從隊列中拉出。嘗試儘可能多地使用指針來減少內存使用和處理時間。確保您線程安全,並在適當時使用std::Mutex

由於您使用的是QT,因此您可以使用QQueue作爲隊列,使用QMutex作爲互斥體。

+0

請問您可以在捕獲端和處理端編寫一個簡單的代碼嗎?只是爲了讓我有想法開始。 – Atefe

+1

如果您提供一些示例代碼,我會查看它並嘗試提供幫助。 – Apexdev