Python-OpenCV 處理視訊(五): 運動方向判斷

發表於2016-05-26

注意,我使用的OpenCV 版本是 3.0, 低版本就有可能出現第一條評論裡的報錯

在檢測出運動的物體之後,我還需要知道運動的方向,使用了上一節中的辦法檢測運動我發現很難去計算運動方向,開始考慮通過計算輪廓的中點的變化來實現,但是因為每次檢測出得輪廓的數量不穩定,所以這個辦法會讓誤差不可控。

這時我發現了 goodFeaturesToTrack 函式,簡直是救了我,goodFeaturesToTrack 函式可以獲取影象中的最大特徵值的角點,以下是我的思路:

Tips: 看程式碼之前請先看看我下面寫的實現思路,另外還有程式碼裡的註釋也對於理解程式碼會有所幫助

  • 對兩幀影象做一個 absdiff 得到新影象。
  • 對新影象做灰度和二值化處理。
  • 使用 goodFeaturesToTrack 函式得到最大特徵值的角點。
  • 計算角點的平均點,寫入佇列。(通過計算平均點的解決辦法類似物理中剛體問題抽象成質點解決的思路)
  • 維護一個長度為 10 的佇列,佇列滿時計算佇列中資料的增減情況,來確定運動方向。

程式碼示例(只實現了左右移動的判斷):

總的來講作為一個影象處理的小白,不斷地折騰和嘗試,終於搞出了自己想要的東西,OpenCV絕對是喜歡折騰的人必要掌握的一個庫了,以後肯定還會繼續研究這塊東西。

相關文章