簡體   English   中英

使用OpenCV進行實時運動檢測

[英]Realtime motion detection using OpenCV

我有一個項目,需要檢測視頻流中的運動。 當檢測到運動時,將進行進一步處理。 無需檢測檢測到運動的區域或更詳細的信息。 我只需要測量兩個圖像之間的像素變化百分比,或者作為進一步處理的觸發類似的東西。

我的想法是獲取兩個圖像的絕對差,對其進行閾值處理並計數像素。 我正在使用cv :: absdiff,cv :: threshold和cv :: countNonZero。 對於完整的高清圖像,此計算大約需要10毫秒。 在30 fps下,單個內核的總和為10 * 30 = 300 ms。

與差值圖像計算相比,這還不包括大約需要2-3倍的圖像灰度轉換。 因此,我可以在單個內核上以全高清格式處理約10 fps。

我現在正在尋找一種可以顯着加快灰度轉換/運動檢測的方法。 就計算能力而言,在RGB視頻流中最快的運動檢測方法是什么?

如果您完全局限於一個核心,則不適用。 但是,如果您的視頻卡質量很好,則可以使用gpu ::或ocl ::函數。 通過使用這些,您可以將操作速度提高3-30倍! 我知道gpu :: threshold比cpu版本快得多的事實。 我可以在geForce gtx660上以0.001秒的時間對1080p圖片進行脫粒。 在相同尺寸的圖像上我的GPU時間的更多示例:遮罩-.002,LBP分類-.053,形態學.002。

  1. 在處理之前縮小圖像尺寸
  2. 在測試之前請應用模糊處理,因為這樣可以減少噪聲。

opencv提供了將mats一起比較的方法,例如cv :: compare,它已使相關的運算符超載。

此外,調試opencv庫和發行版庫之間在速度方面也存在巨大差異,以至於在擔心速度之前,請使用opencv發行版庫進行發行版編譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM