重新设定OpenCV Tracker的跟踪对象

OpenCV的Tracking模块实现了6种不同的跟踪算法:BOOSTING,MIL,KCF,TLD,MEDIANFLOW和GOTURN。本文展示了当希望换一个对象跟踪的时候,需要采取的可行方法。

重新设定OpenCV Tracker的跟踪对象

OpenCV附加模块opencv_contrib下提供了一个特殊的Tracking模块。该模块实现了6种不同的跟踪算法:BOOSTING,MIL,KCF,TLD,MEDIANFLOW和GOTURN。Object Tracking using OpenCV (C++/Python)这篇文章中详细对这几种方法进行了介绍与比较。同时官方也提供了示例代码演示如何使用这个模块。

示例代码对视频中的一个对象进行了跟踪,但是当前面临的问题是,当希望换一个对象跟踪的时候,以下两种做法都是无效的:

  1. 将新对象的Rect2d直接传递给update()函数;
  2. 再次使用tracker的init()函数。

这个问题在这篇文中的评论区也有讨论。

解决办法其实也不复杂:重新创建一个Tracker对象。假设你之前创建的对象为tracker,那么重新使用create函数建立一个新对象即可:

tracker = Tracker::create( "KCF" );