首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

opencv教程-目标跟踪

1:MeanShift算法

retval, window=cv.meanShift(probImage, window, criteria)

参数probImage:当前图像反向投影图

参数window:前一图像目标框

参数criteria:迭代停止条件

算法原理:属于核密度估计算法,向密度最大的方向移动(反向投影就是一种概率密度图,颜色亮的地方密度高,与目标物体更相似);基于矩形框的中心和矩形框内反向投影图的质心进行移动(中心向质心移动),直到达到迭代停止条件,则会得到新的位置框。

基本流程:

(1)选定目标框。

(2)根据色调或灰度值来设定条件,目的是为了提取目标区域,因为矩形框一般会包含有背景,会对后面的反向投影有较大影响;比如下面示例中人物穿的黑色衣服,背景地是白色,就可以设定灰度范围[0,100]来过滤掉地的影响。

(3)计算目标框内目标的直方图,并对直方图进行归一化[0,255]。

(4)对于每一帧,基于目标直方图计算反向投影。

(5)对于每一帧,基于当前帧的反向投影调用meanShift算法得到新的目标矩形框。

(6)重复(4)、(5)知道视频结束。

上述第一张图是要跟踪的目标图和目标区域标记图,第二幅图是跟踪图和反向投影图。

2:CamShift算法

retval, window=cv.CamShift(probImage, window, criteria)

算法原理:每帧基于MeanShift算法的结果计算新的窗体,然后每帧都重复该操作;所以该算法的目标框是大小变化的,而且是不同角度的矩形框,这与上述算法不同。

说实话,opencv提供的上述算法效果很一般,自己学习或者做简单的应用可以,但用在实际项目中就不合适了,满足不了项目需求,但因为是没有用到训练模型,只是单纯的基于算法进行逐帧计算,所以速度很快,效果也就不要太过强求了,想要一个好的跟踪算法最好是做目标识别然后再跟踪,所以这里以学习为主。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201222A0CB1300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券