目录

一、CamShift

1.1 原理

二、流程

三、代码

四、总结


一、CamShift

MeanShift的结果有一个问题,检测窗口的大小是固定的,而目标是一个由近到远逐渐变小的过程,固定的窗口是不合适的。 所以需要根据目标的大小和角度来修正窗口的大小和角度。

传统目标跟踪——meanshift算法_平行世界里的我的博客-CSDN博客

  CamShift(Continuously Adaptive Mean-Shift algorithm)是MeanShift算法的改进算法,可以解决这个问题。它可以随着跟踪目标大小的变化实时调整搜索窗口的大小,具有更好的跟踪效果。 Camshift 算法首先应用MeanShift。 一旦MeanShift收敛,它就会更新窗口的大小,同时计算出最佳拟合椭圆的方向,从而根据目标的位置和大小来更新搜索窗口。

camshift讲解

1.1 原理

camshift利用目标的颜色直方图模型将图像转换为颜色概率分布图,初始化一个搜索窗的大小和位置,并根据上一帧得到的结果自适应调整搜索窗口的位置和大小,从而定位出当前图像中目标的中心位置。

二、流程

将meanshift算法扩展到连续图像序列,就是camshift算法。它将视频的所有帧做meanshift运算,并将上一帧的结果,即搜索窗的大小和中心,作为下一帧meanshift算法搜索窗的初始值。如此迭代下去,就可以实现对目标的跟踪。

算法过程为:

(1).初始化搜索窗

(2).计算搜索窗的颜色概率分布(反向投影)

(3).运行meanshift算法,获得搜索窗新的大小和位置。

(4).在下一帧视频图像中用(3)中的值重新初始化搜索窗的大小和位置,再跳转到(2)继续进行。

三、代码

import cv2 as cv# 创建读取视频的对象
cap = cv.VideoCapture("E:\Python-Code/videodataset/enn.mp4")# 获取第一帧位置,并指定目标位置
ret, frame = cap.read()
c, r, h, w = 530, 160, 300, 320
track_window = (c, r, h, w)
# 指定感兴趣区域
roi = frame[r:r + h, c:c + w]# 计算直方图
# 转换色彩空间
hsv_roi = cv.cvtColor(roi, cv.COLOR_BGR2HSV)
# 计算直方图
roi_hist = cv.calcHist([hsv_roi], [0], None, [180], [0, 180])
# 归一化
cv.normalize(roi_hist, roi_hist, 0, 255, cv.NORM_MINMAX)# 目标追踪
# 设置窗口搜索终止条件:最大迭代次数,窗口中心漂移最小值
term_crit = (cv.TermCriteria_EPS | cv.TERM_CRITERIA_COUNT, 10, 1)while True:ret, frame = cap.read()if ret:# 计算直方图的反向投影hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)dst = cv.calcBackProject([hsv], [0], roi_hist, [0, 180], 1)# 进行meanshift追踪ret, track_window = cv.meanShift(dst, track_window, term_crit)# 将追踪的位置绘制在视频上,并进行显示x, y, w, h = track_windowimg = cv.rectangle(frame, (x, y), (x + w, y + h), 255, 2)cv.imshow("frame", img)if cv.waitKey(20) & 0xFF == ord('q'):breakelse:break# 资源释放
cap.release()
cv.destroyAllWindows()

然后运行结果中的绿色矩形框就能够根据跟踪的对象而自适应改变框的大小了(注意:这个Camshift很容易就会检测出错)

四、总结

camshift能有效解决目标变形和遮挡的问题,对系统资源要求不高,时间复杂度低,在简单背景下能够取得良好的跟踪效果。但当背景较为复杂,或者有许多与目标颜色相似像素干扰的情况下,会导致跟踪失败。因为它单纯的考虑颜色直方图,忽略了目标的空间分布特性,所以这种情况下需加入对跟踪目标的预测算法。

传统目标跟踪——CamShift算法(改进MeanShift)相关推荐

  1. Opencv目标跟踪—CamShift算法

    CamShift算法全称是"Continuously Adaptive Mean-Shift"(连续的自适应MeanShift算法),是对MeanShift算法的改进算法,可以在跟 ...

  2. 计算机视觉中,目标跟踪相关算法论文总结

    目标跟踪相关算法&论文总结 作为小白,近期想看一些目标跟踪相关的内容,但又无从下手,花了几天时间,找各种资料,总结了网上大佬们写的文章.(大部分来自CSDN.知乎.微信公众号,均已注明出处) ...

  3. ccot 目标跟踪全称_目标跟踪--CamShift

    转载请注明出处! !! 目标跟踪--CamShift CamShift全称是ContinuouslyAdaptive Mean Shift,即连续自适应的MeanShift算法.而MeanShift算 ...

  4. 传统目标跟踪——MeanShift算法

    目录 一.均值漂移(MeanShift) 二.流程 三.代码 3.1 meanshift+固定框的代码 3.2 优化:meanshift+鼠标选择 3.3 meanshift+自己实现函数 四.补充知 ...

  5. 目标跟踪之camshift---opencv中meanshift和camshift例子的应用

    在这一节中,主要讲目标跟踪的一个重要的算法Camshift,因为它是连续自使用的meanShift,所以这2个函数opencv中都有,且都很重要.为了让大家先达到一个感性认识.这节主要是看懂和运行op ...

  6. 传统目标跟踪方法简介

    前言:由于个人之前做过一个目标跟踪算法,所以,有必要将之前的工作做一个梳理. 目录 基于第一种思路的运动目标检测 1. 静态背景: 2. 运动场 目标跟踪: 相似性度量算法: 核心搜索算法: 卡尔曼滤 ...

  7. 目标跟踪经典算法汇总(持续更新...)

    如题,虽然这个问题是经典目标跟踪算法,但事实上,可能我们并不需要那些曾经辉煌但已被拍在沙滩上的tracker(目标跟踪算法),而是那些即将成为经典的,或者就目前来说最好用.速度和性能都看的过去trac ...

  8. 目标跟踪--CamShift

    CamShift全称是ContinuouslyAdaptive Mean Shift,即连续自适应的MeanShift算法,而MeanShift算法,首先得对MeanShift算法有个初步的了解,可以 ...

  9. java opencv 视频教程_OpenCV视频目标跟踪示例教程(Meanshift)

    使用Opencv中的Camshift进行视频中目标跟踪是一个不错的选择,这方面的示例很多,但是大多代码不全,或者代码存在问题,不能正常使用,这里,对很多文章进行整理后,贴出了正确可以使用的代码. 安装 ...

最新文章

  1. 源码阅读:SDWebImage(六)——SDWebImageCoderHelper
  2. 3d旋转相册代码源码_实现可旋转的Reflection Probe(原创)
  3. 12款顶级SIEM工具比较与评级
  4. 谈谈mysql优化_浅谈MySQL SQL优化
  5. JAVA vs C++之速度—
  6. java batch_Java EE 7 Batch中传递属性/参数的2种方式
  7. find:查找文件或目录
  8. bootstrap table传回的数据后端怎么获取_基于 Spring Cloud 开发的分布式系统,遇到爬虫、接口盗刷怎么办
  9. java jxta_JXTA——JAVA P2P网络编程技术(入门篇) | 学步园
  10. cocos2d-x 源码分析 总目录
  11. javascript : spket 视频教程
  12. php代码实现微信代扣,PHP是如何实现微信H5支付的?
  13. 可测函数积分的进一步性质
  14. flex弹性布局教程-02-容器display设置为flex
  15. 微信公众号oauth授权
  16. Java Runtime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Ecli
  17. Qt部分拉伸的背景图片
  18. 微信公众号留言功能实现方法分享
  19. Linux gpg命令
  20. 小白成长记第2期:简单易操的YouTube美金项目,get!

热门文章

  1. 心电图系统服务器与存储系统,心电数据存储 - 基于手机通信的心电图机设计方案...
  2. WPS如何将两个指标以柱形图和折线图的形式呈现在一张图表中
  3. 【阿里安全 × ICDM 2022】20万奖金池!大规模电商图上的风险商品检测赛火热报名中!...
  4. python五子棋游戏15*15_python实现五子棋游戏(pygame版)
  5. getSingleton 和popu lateBean 解析
  6. 圣战之系谱 恋爱系统详解
  7. 用数字说话:产品经理如何处理工作中的突发事件
  8. 软件随想录(local.joelonsoftware.com/wiki)-2004年01月26日 让你的履历有可读性 - Getting Your Résumé Read
  9. TFT和IPS屏的区别
  10. Maven命令报错读取jar时出错