meanshift原理:一个迭代的步骤,即先算出当前点的偏移均值,移动该点到其偏移均值,然后以此为新的起始点,继续移动,直到满足一定的条件结束。

Meanshift算法:简单,迭代次数少,但无法解决目标的遮挡问题并且不能适应运动目标的的形状和大小变化。

cv.meanShift(probImage, window, criteria)

参数:

  • probImage: ROI区域,即目标的直方图的反向投影

  • window: 初始搜索窗口,就是定义ROI的rect

  • criteria: 确定窗口搜索停止的准则,主要有迭代次数达到设置的最大值,窗口中心的漂移值大于某个设定的限值等。

实现Meanshift的主要流程是:

  1. 读取视频文件:cv.videoCapture()
  2. 感兴趣区域设置:获取第一帧图像,并设置目标区域,即感兴趣区域
  3. 计算直方图:计算感兴趣区域的HSV直方图,并进行归一化
  4. 目标追踪:设置窗口搜索停止条件,直方图反向投影,进行目标追踪,并在目标位置绘制矩形框。
import cv2 as cv# 1.获取图像
cap = cv.VideoCapture('./1.mp4')# 2.获取第一帧图像,并指定目标位置
ret, frame = cap.read()# 2.1 目标位置(行,高,列,宽)
r, h, c, w = 197, 141, 0, 208
track_window = (c, r, w, h)# 2.2 指定目标的感兴趣区域
roi = frame[r:r+h, c:c+w]# 3. 计算直方图
# 3.1 转换色彩空间(HSV)
hsv_roi = cv.cvtColor(roi, cv.COLOR_BGR2HSV)# 3.2 去除低亮度的值
# mask = cv.inRange(hsv_roi, np.array((0., 60.,32.)), np.array((180.,255.,255.)))# 3.3 计算直方图
roi_hist = cv.calcHist([hsv_roi], [0], None, [180], [0, 180])# 3.4 归一化
cv.normalize(roi_hist, roi_hist, 0, 255, cv.NORM_MINMAX)# 4. 目标追踪
# 4.1 设置窗口搜索终止条件:最大迭代次数,窗口中心漂移最小值
term_crit = (cv.TERM_CRITERIA_EPS | cv.TERM_CRITERIA_COUNT, 10, 1)while(True):# 4.2 获取每一帧图像ret, frame = cap.read()if ret == True:# 4.3 计算直方图的反向投影hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)dst = cv.calcBackProject([hsv], [0], roi_hist, [0, 180], 1)# 4.4 进行meanshift追踪ret, track_window = cv.meanShift(dst, track_window, term_crit)# 4.5 将追踪的位置绘制在视频上,并进行显示x, y, w, h = track_windowimg2 = cv.rectangle(frame, (x, y), (x + w, y + h), 255, 2)cv.imshow('frame', img2)if cv.waitKey(60) & 0xFF == ord('q'):breakelse:break# 5. 资源释放
cap.release()
cv.destroyAllWindows()

OpenCV meanshift目标追踪相关推荐

  1. opencv多目标追踪容器

    opencv多目标追踪容器 之前做过一个多目标追踪的项目,尝试了一下opencv提供的追踪容器,个人感觉效果一般. # coding:utf-8 # @Time : 14/12/2018 17:07 ...

  2. OpenCV camshift目标追踪

    camshift算法是对meanshift算法的改进,首先应用meanshift,一旦meanshift收敛,它就会更新窗口的大小,还计算最佳拟合椭圆的方向,从而根据目标的位置和大小更新搜索窗口. c ...

  3. python—opencv 实时视频目标追踪

    功能: 1.获取摄像头,实时显示 2.鼠标获取第一帧中的目标roi区域 3.在视频中实时对目标进行追踪. 4.两种目标追踪的方式:'meanshift','camshift' 5.保存视频 impor ...

  4. 如何使用opencv进行目标追踪

    日常@尊师: © Fu Xianjun. All Rights Reserved. 使用opencv目标追踪之前先要在CDM中 安装pytesseract 代码是:pip install pytess ...

  5. OpenCV图像处理——目标追踪

    总目录 图像处理总目录←点击这里 二十四.目标追踪 24.1.多目标(手动检测)追踪 24.1.1.原理 目标检测:运行之后按下s,通过鼠标对某个目标进行检测,然后点击空格或者回车 目标追踪:open ...

  6. 【Opencv】目标追踪——高斯混合模型分离算法(MOG)

    文章目录 1 环境 2 效果 3 原理 4 代码 1 环境 Python 3.8.8 PyCharm 2021 opencv-python 2 效果 3 原理   视频图像中的目标检测与跟踪,是计算机 ...

  7. 用opencv实现目标追踪的学习笔记——camshift

    小白的学习笔记--opencv camshift -基础:零c++基础,零opencv基础,简单C语言基础,略知数字图像处理知识 -工具:VS2015+opencv 2.4.13 -sample: E ...

  8. python机器识别追踪_多目标追踪器:用OpenCV实现多目标追踪(C++/Python)

    原标题:多目标追踪器:用OpenCV实现多目标追踪(C++/Python) MultiTracker : Multiple Object Tracking using OpenCV (C++/Pyth ...

  9. OpenCV—用meanshift和Camshift进行目标追踪

    学习目标 理解meanshift的原理 知道camshift算法 能够使用meanshift和Camshift进行目标追踪 1.meanshift 1.1原理 meanshift算法的原理很简单.假设 ...

最新文章

  1. 2018.8.14-C#复习笔记总
  2. 深入浅出的mysql第三版和第二版的区别_读《深入浅出Mysql》第二版,笔记
  3. MVC中使用Entity Framework 基于方法的查询学习笔记 (二)
  4. event php,PHP event 事件机制
  5. VisualSVNServer的使用
  6. 如何过上简单的生活(转)
  7. 尝试一下sql server2016里面的json功能
  8. 团标《智慧高速公路建设总体技术要求》发布征求意见稿
  9. Netty之线程唤醒wakeup
  10. L2CAP数据发送和接收
  11. iOS——directory not found for option 链接错误
  12. 大数据之Hadoop简介及环境搭建
  13. 企业网络中的防火墙旁挂实例
  14. 域名解析服务器类型(四类)
  15. 1134: 小青蛙,跳跳跳
  16. MongoDb企业应用实战(一) 写在MongoDB应用介绍之前(ii)
  17. Learning with Noisy Correspondencefor Cross-modal Matching(NCR)--文献翻译
  18. kubernetes各组件介绍
  19. 机器学习入门-一元线性回归模型的骚操作
  20. 《火星人敏捷开发手册2012-12-25》版发布:松结对编程

热门文章

  1. python property理解
  2. processing link链接
  3. C语言学习笔记(五) 数组
  4. Dev控件使用 - 皮肤
  5. jQuery Form Plugin (jquery表单插件)
  6. 网络环境下计算机取证的见解,2018年华医网初级继续教育答案解析
  7. JavaScript try/catch/finally 语句
  8. html DOM操作表格及样式
  9. 8086内存分段理解
  10. .net后台获取html控件值的2种方法