文章目录

  • 1 Meanshift
  • 2 Camshift

1 Meanshift

  主要步骤:
  1)寻找直方图,以便将目标反投影到每帧上以计算均值偏移;
  2)提供窗口的初始位置

# coding: utf-8
import cv2 as cv
import numpy as npX, Y, W, H = 300, 200, 200, 100def test():capture = cv.VideoCapture(0)track_window = (X, Y, W, H)try:ret, frame = capture.read()except:raise ValueError("Cannot open video capture.")# 设置初始ROI来追踪roi = frame[Y: Y + H, X: X + W]hsv_roi = cv.cvtColor(roi, cv.COLOR_BGR2HSV)mask = cv.inRange(hsv_roi, np.array((0, 60, 32)), np.array((180, 255, 255)))roi_hist = cv.calcHist([hsv_roi], [0], mask, [180], [0, 180])cv.normalize(roi_hist, roi_hist, 0, 255, cv.NORM_MINMAX)# 设置终止条件term_crit = (cv.TERM_CRITERIA_EPS | cv.TERM_CRITERIA_COUNT, 10, 1)while True:ret, frame = capture.read()frame = cv.flip(frame, 90)if ret is not True:breakhsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)dst = cv.calcBackProject([hsv], [0], roi_hist, [0, 180], 1)ret, track_window = cv.meanShift(dst, track_window, term_crit)x, y, w, h = track_windowimg_show = cv.rectangle(frame, (x, y), (x + w, y + h), 255, 2)cv.imshow("Tracking", img_show)keyboard = cv.waitKey(30)if keyboard == 'q' or keyboard == 27:breakif __name__ == '__main__':test()

2 Camshift

  Meanshift中,窗口的大小是固定,Camshift则可以自适应窗口:
  1)使用Meanshift;
  2)一旦Meanshift收敛,则更新窗口大小为:
s=2×M00256s = 2 \times \sqrt{\frac{M_{00}}{256}} s=2×256M00​​​
  3)计算出最合适的移动方向,并更新;
  4)满足一定精度时终止。

# coding: utf-8
import cv2 as cv
import numpy as npX, Y, W, H = 300, 200, 200, 100def test():capture = cv.VideoCapture(0)track_window = (X, Y, W, H)try:ret, frame = capture.read()except:raise ValueError("Cannot open video capture.")# 设置初始ROI来追踪roi = frame[Y: Y + H, X: X + W]hsv_roi = cv.cvtColor(roi, cv.COLOR_BGR2HSV)mask = cv.inRange(hsv_roi, np.array((0, 60, 32)), np.array((180, 255, 255)))roi_hist = cv.calcHist([hsv_roi], [0], mask, [180], [0, 180])cv.normalize(roi_hist, roi_hist, 0, 255, cv.NORM_MINMAX)# 设置终止条件term_crit = (cv.TERM_CRITERIA_EPS | cv.TERM_CRITERIA_COUNT, 10, 1)while True:ret, frame = capture.read()frame = cv.flip(frame, 90)if ret is not True:breakhsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)dst = cv.calcBackProject([hsv], [0], roi_hist, [0, 180], 1)# 不一样的地方开始了ret, track_window = cv.CamShift(dst, track_window, term_crit)pts = cv.boxPoints(ret)pts = np.int0(pts)img_show = cv.polylines(frame, [pts], True, 255, 2)cv.imshow("Tracking", img_show)keyboard = cv.waitKey(30)if keyboard == 'q' or keyboard == 27:breakif __name__ == '__main__':test()

参考文献
【1】Opencv中文文档

Opencv之Meanshift和Camshift相关推荐

  1. 使用Python,OpenCV的Meanshift 和 Camshift 算法来查找和跟踪视频中的对象

    使用Python,OpenCV的Meanshift 和 Camshift 算法来查找和跟踪视频中的对象 1. 效果图 2. 源码 2.1 MeanShift 2.2 Camshift(Continuo ...

  2. 目标跟踪学习笔记_1(opencv中meanshift和camshift例子的应用)

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

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

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

  4. opencv中meanshift和camshift函数的使用

    原文地址:http://www.360doc.com/content/13/1106/16/10724725_327176222.shtml 在这一节中,主要讲目标跟踪的一个重要的算法Camshift ...

  5. python opencv入门 Meanshift 和 Camshift 算法(40)

    内容来自OpenCV-Python Tutorials 自己翻译整理 目标: 在本章,学习Meanshift算法和Camshift算法来寻找和追踪视频中的目标物体. Meanshift算法: mean ...

  6. OpenCV均值移位(Meanshift)和Camshift算法

    OpenCV Meanshift和Camshift算法 Meanshift和Camshift算法 目标 均值漂移Meanshift OpenCV中的Meanshift Camshift OpenCV中 ...

  7. opencv python 多帧降噪算法_OpenCV-Python中用于视频跟踪的Meanshift和Camshift算法介绍...

    学习目标 在本章中, 我们将学习用于跟踪视频中对象的Meanshift和Camshift算法. Meanshift Meanshift背后的直觉很简单,假设你有点的集合.(它可以是像素分布,例如直方图 ...

  8. OpenCV系列之Meanshift和Camshift | 四十七

    学习目标 在本章中, 我们将学习用于跟踪视频中对象的Meanshift和Camshift算法. Meanshift Meanshift背后的直觉很简单,假设你有点的集合.(它可以是像素分布,例如直方图 ...

  9. opencv c++ 光流法、稀疏光流法、稠密光流法、均值迁移追踪(meanshift、camshift)

    1.概念 参考: (70条消息) 什么是光流法_张年糕慢慢走的博客-CSDN博客_光流法 (70条消息) 计算机视觉--光流法(optical flow)简介_T-Jhon的博客-CSDN博客_光流法 ...

  10. opencv中直方图和颜色跟踪相关:calcHist, calcBackProject, Meanshift和Camshift

    1. 理解calcHist的应用 1)单通道hist calcHist比较好理解,就是计算 图像的直方图,单通道来说就是 灰度的分布 比如下图是灰度像素的分布,在0-255的灰度图上划分为若干个bin ...

最新文章

  1. 使用Maven管理Java项目
  2. 汇总python三种数据结构list,set,dict的常见操作
  3. [Android L]SEAndroid开放设备文件结点权限(读或写)方法(涵盖常用操作:sys/xxx、proc/xxx、SystemProperties)热门干货
  4. python queue模块_Python的queue模块详解
  5. java 画多边形_javascript绘制一个多边形
  6. 百度下mysql卸载_如何把Mysql卸载干净(亲测有效)
  7. Java千百问_05面向对象(004)_java接口到底是什么
  8. Java截取视频某一帧
  9. 如何将在立创商场下载的PCB导入工程
  10. 大数据联姻“互联网+”驱动绿色变革
  11. 基于BALKANFamilyTreeJS插件的家谱可视化项目功能Demo
  12. grep不查找隐藏文件夹的方法
  13. Nginx 方向代理解决跨域问题-2
  14. spring boot新闻管理系统毕业设计源码211113
  15. 图解HTTP----web的攻击技术
  16. laravel视图 compact 循环遍历,if判断
  17. C++ Primer Plus 自学第六章结尾编程9题
  18. C/C++内存检测工具valgrind
  19. 杭电多校第一场第三题 Backpack(异或dp+bitset)
  20. VC++网络安全编程范例(1)--数字证书有效期验证

热门文章

  1. 10个Android开发必看的GitHub开源项目
  2. 数字图像处理应用领域
  3. protel 99se 负片打印
  4. protel 99se快捷键 总结
  5. centos7配置时间同步服务器
  6. 常用测试工具-----IPOP
  7. pe linux 引导修复工具下载,winpe系统引导修复工具
  8. python 股票指标库talib_Talib金融库的使用
  9. windows bat打印机打印测试页
  10. java编写安卓计算器_Android计算器编写代码