[OpenCV] Camshiftdemo 目標跟蹤

來源:互聯網
上載者:User
1. 導言

這兩天又有個機會又(為什麼要說又呢?)要用到OpenCV中的camshift tracking。簡單記錄一下,算是這篇目標跟蹤學習筆記_1(opencv中meanshift和camshift例子的應用)文章的補充

2. 工作流程

2.1 使用方法

  • trackObject為0表示不跟蹤,為1表示繼續跟蹤;滑鼠選擇完(新)跟蹤地區後trackObject為-1, 根據新視窗準備跟蹤的資料(色彩空間轉換,長條圖等)---這些上面的代碼注釋裡都有提到
  • 剛讀源碼才發現可以按p暫停後再選跟蹤目標---這個邏輯還挺有用

2.2 涉及的源碼有:

$OPENCV_HOME/samples/cpp/camshiftdemo.cpp

$OPENCV_HOME//modules/video/src/camshift.cpp:總共4個函數

  • cv::CamShift
  • cv::meanShift
  • cvCamShift
  • cvMeanShift

2.3 呼叫流程:

cv::CamShift(...)-->cvCamShift(...)-->cvMeanShift(...)

  • i) cvCamShift會調整輸入視窗大小。具體是四個矩形邊各自向外擴張TOLERANCE像素。越界的情況會自動處理。TOLERANCE hard coded為10。
  • ii)對擴充後的矩形跟蹤地區計算moments。如果零階矩小於DBL_EPSILON,則直接返回-1。
  • iii)DBL_EPSILON: 前28位在本機上列印出來是這樣:0.0000000000000002220446049250

注意之前cv::CamShift初始化了一個CvConnectedComp comp 為全0值,並傳入cvCamShift。cvCamShift返回後再用這個comp改變傳入cv::CamShift的最最初始的跟蹤視窗。

所以上面如果返回-1,則初始視窗(camshiftdemo中的trackWindow)會變成0。在下一幀時會抱如下錯誤:

camshift.cpp:81: error: (-5) Input window has non-positive sizes in function cvMeanShift

這也算是一個小bug吧。可以出現這種情況就提示不再跟蹤任何視窗,或在返回-1前把當前跟蹤視窗(其m00為零)賦給_comp,這樣跟蹤視窗應該一直維持在那個小地區,直到選取新的地區---我這麼試了,又出drawing的錯誤,應該是地區太小了,沒法fit elipse。 whatever啦。。。

每一幀的處理中,基本上有三個地方可能改變初始的跟蹤視窗(注意這裡初始視窗是針對每一幀而言,而不是滑鼠選定的最開始的初始視窗)

  1. cvMeanshift本身最終收斂的結果
  2. cvCamShift中,cvMeanShift之後視窗擴充,也就是上面的i)
  3. 屬於CamShift本身的根據二階矩調整跟蹤視窗大小的演算法

3. The End

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.