Opencv之Meanshift和Camshift
文章目录
- 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相关推荐
- 使用Python,OpenCV的Meanshift 和 Camshift 算法来查找和跟踪视频中的对象
使用Python,OpenCV的Meanshift 和 Camshift 算法来查找和跟踪视频中的对象 1. 效果图 2. 源码 2.1 MeanShift 2.2 Camshift(Continuo ...
- 目标跟踪学习笔记_1(opencv中meanshift和camshift例子的应用)
在这一节中,主要讲目标跟踪的一个重要的算法Camshift,因为它是连续自使用的meanShift,所以这2个函数opencv中都有,且都很重要.为了让大家先达到一个感性认识.这节主要是看懂和运行op ...
- OpenCV—用meanshift和Camshift进行目标追踪
学习目标 理解meanshift的原理 知道camshift算法 能够使用meanshift和Camshift进行目标追踪 1.meanshift 1.1原理 meanshift算法的原理很简单.假设 ...
- opencv中meanshift和camshift函数的使用
原文地址:http://www.360doc.com/content/13/1106/16/10724725_327176222.shtml 在这一节中,主要讲目标跟踪的一个重要的算法Camshift ...
- python opencv入门 Meanshift 和 Camshift 算法(40)
内容来自OpenCV-Python Tutorials 自己翻译整理 目标: 在本章,学习Meanshift算法和Camshift算法来寻找和追踪视频中的目标物体. Meanshift算法: mean ...
- OpenCV均值移位(Meanshift)和Camshift算法
OpenCV Meanshift和Camshift算法 Meanshift和Camshift算法 目标 均值漂移Meanshift OpenCV中的Meanshift Camshift OpenCV中 ...
- opencv python 多帧降噪算法_OpenCV-Python中用于视频跟踪的Meanshift和Camshift算法介绍...
学习目标 在本章中, 我们将学习用于跟踪视频中对象的Meanshift和Camshift算法. Meanshift Meanshift背后的直觉很简单,假设你有点的集合.(它可以是像素分布,例如直方图 ...
- OpenCV系列之Meanshift和Camshift | 四十七
学习目标 在本章中, 我们将学习用于跟踪视频中对象的Meanshift和Camshift算法. Meanshift Meanshift背后的直觉很简单,假设你有点的集合.(它可以是像素分布,例如直方图 ...
- opencv c++ 光流法、稀疏光流法、稠密光流法、均值迁移追踪(meanshift、camshift)
1.概念 参考: (70条消息) 什么是光流法_张年糕慢慢走的博客-CSDN博客_光流法 (70条消息) 计算机视觉--光流法(optical flow)简介_T-Jhon的博客-CSDN博客_光流法 ...
- opencv中直方图和颜色跟踪相关:calcHist, calcBackProject, Meanshift和Camshift
1. 理解calcHist的应用 1)单通道hist calcHist比较好理解,就是计算 图像的直方图,单通道来说就是 灰度的分布 比如下图是灰度像素的分布,在0-255的灰度图上划分为若干个bin ...
最新文章
- 使用Maven管理Java项目
- 汇总python三种数据结构list,set,dict的常见操作
- [Android L]SEAndroid开放设备文件结点权限(读或写)方法(涵盖常用操作:sys/xxx、proc/xxx、SystemProperties)热门干货
- python queue模块_Python的queue模块详解
- java 画多边形_javascript绘制一个多边形
- 百度下mysql卸载_如何把Mysql卸载干净(亲测有效)
- Java千百问_05面向对象(004)_java接口到底是什么
- Java截取视频某一帧
- 如何将在立创商场下载的PCB导入工程
- 大数据联姻“互联网+”驱动绿色变革
- 基于BALKANFamilyTreeJS插件的家谱可视化项目功能Demo
- grep不查找隐藏文件夹的方法
- Nginx 方向代理解决跨域问题-2
- spring boot新闻管理系统毕业设计源码211113
- 图解HTTP----web的攻击技术
- laravel视图 compact 循环遍历,if判断
- C++ Primer Plus 自学第六章结尾编程9题
- C/C++内存检测工具valgrind
- 杭电多校第一场第三题 Backpack(异或dp+bitset)
- VC++网络安全编程范例(1)--数字证书有效期验证