基本概念
camshift("continuously adaptive mean-shift"的缩写),即连续自适应的 算法。其基本思想是对视频序列的所有图像帧都作MeanShift运算,并将上一帧的结果(即搜索窗口的中心位置和窗口大小)作为下一帧MeanShift算法的搜索窗口的初始值,如此迭代下去。简单点说,meanShift是针对单张图片寻找最优迭代结果,而camShift则是针对视频序列来处理,并对该序列中的每一帧图片都调用meanShift来寻找最优迭代结果。正是由于camShift针对一个视频序列进行处理,从而保证其可以不断调整窗口的大小,如此一来,当目标的大小发生变化的时候,该算法就可以自适应地调整目标区域继续跟踪。算法基本步骤:
- 初始化搜索窗
- 计算搜索窗区域的颜色概率分布(反向投影)
- 运行mean-shift算法,得到搜索窗新的大小和位置。
- 在下一帧视频图像中用步骤3中的值重新初始化搜索窗的大小和位置,继续从步骤2执行。
示例演示
在OpenCV自带的camShift的例子当中,是通过计算目标在HSV空间下的H分量直方图,通过直方图反向投影得到目标像素的概率分布,然后通过调用OpenCV的CAMSHIFT算法,自动跟踪并调整目标窗口的中心位置与大小。该算法对于简单背景下的单目标跟踪效果较好,但如果被跟踪目标与背景颜色或周围其它目标颜色比较接近,则跟踪效果较差。另外,由于采用颜色特征,所以它对被跟踪目标的形状变化有一定的抵抗能力。
完整代码
#include <iostream>
#include <opencv2/o
C++使用OpenCV的Camshift进行颜色跟踪

本文介绍了C++中利用OpenCV的Camshift算法实现颜色范围内的车辆跟踪。Camshift是连续自适应的MeanShift算法,用于视频序列的跟踪。它通过在HSV空间计算目标的H分量直方图,进行反向投影,然后用mean-shift算法调整搜索窗口,以适应目标大小的变化。在OpenCV示例中,此方法对简单背景下的单目标跟踪效果良好,但对颜色相近的目标或复杂背景跟踪效果有限。
订阅专栏 解锁全文
8624

被折叠的 条评论
为什么被折叠?



