对于刚入门的opencv玩家,提起目标跟踪,马上想起的就是camshift,但是camshift跟踪往往达不到我们的跟踪要求,包括稳定性和准确性。
opencv3.1版本发行后,集成了多个跟踪算法,即tracker,大部分都是近年VOT竞赛榜上有名的算法,虽然仍有缺陷存在,但效果还不错。
ps:我在知乎上看到一个目标跟踪的介绍,感觉不错,链接在此!
单目标跟踪很简单,放一个官方例程供参考(opencv官方):
其中, 跟踪器的创建可选以下几种,代表使用的跟踪算法;
- MIL
- BOOSTING
- MEDIANFLOW
- TLD
- KCF
eg-- Ptr<Tracker> tracker = Tracker::create("KCF");
多目标跟踪使用的是MultiTracker,如MultiTracker myTracker("KCF"),注意两点,添加目标用其成员函数myTracker.add(Mat src, Rect2d roi),获得跟踪结果使用myTracker.update(Mat src, vector<Rect2d> targets),跟踪结果的序号即vector的序号。
以下代码为跟踪鼠标框选的目标,跟踪的目标个数大概为10个(原则上是没有上限的,但我电脑比较烂,目标多了会卡)