CamShift算法,OpenCV实现(3):CamShift算法

news/2024/7/10 21:14:07 标签: 算法, search, 图像处理, email, qq, 扩展
CamShift算法,OpenCV实现(3):CamShift算法

1.原理
在了解了MeanShift算法以后,我们将 MeanShift算法扩展到连续图像序列(一般都是指视频图像序列),这样就形成了CamShift算法。CamShift算法的全称是 "Continuously Apaptive Mean-SHIFT",它的基本思想是视频图像的所有帧作MeanShift运算,并将上一帧的结果(即Search Window的中心和大小)作为下一帧MeanShift算法的Search Window的初始值,如此迭代下去,就可以实现对目标的跟踪。整个算法的具体步骤分5步:
Step 1:将整个图像设为搜寻区域。
Step 2:初始话Search Window的大小和位置。
Step 3:计算Search Window内的彩色概率分布,此区域的大小比Search Window要稍微大一点。
Step 4:运行MeanShift。获得Search Window新的位置和大小。
Step 5:在下一帧视频图像中,用Step 3获得的值初始化Search Window的位置和大小。跳转到Step 3继续运行。

2.实现
在OpenCV中,有实现CamShift算法的函数,此函数的原型是:
  cvCamShift(IplImage* imgprob, CvRect windowIn,
                CvTermCriteria criteria, 
                CvConnectedComp* out, CvBox2D* box=0);
其中:
   imgprob:色彩概率分布图像。
   windowIn:Search Window的初始值。
   Criteria:用来判断搜寻是否停止的一个标准。
   out:保存运算结果,包括新的Search Window的位置和面积。
   box:包含被跟踪物体的最小矩形。

说明:
1.在OpenCV 4.0 beta的目录中,有CamShift的例子。遗憾的是这个例子目标的跟踪是半自动的,即需要人手工选定一个目标。我正在努力尝试全自动的目标跟踪,希望可以和大家能在这方面与大家交流。

-----------------------------致力于多媒体技术,成为有思想的软件工程师------------------------

此文章为我原创作品,若要转载,请和本人联系,或注明出处。
欢迎大家对文章内容提出宝贵意见,同时希望大家及时指出文中的错误之处,这样我可以及时更正。
我的联系方式:
QQ: 7578420

Email:shichongdong80@gmail.com
注:由于现在本人已经上班,没有时间挂在QQ上,所以我很乐意和大家用Email交流以下研究领域:
    图像处理/视频处理/OpenCV/计算机图像学


----------------------------------------------------------------------------------------

【来源】

http://www.niftyadmin.cn/n/1089666.html

相关文章

gecode中自定义brancher

实际应用中&#xff0c;往往要比官方的示例复杂很多&#xff0c;这里对变量的选择等往往需要以自定义的方式进行选择&#xff0c;这个时候就需要自定义brancher&#xff0c;相关注释在代码中 #include <gecode/int.hh>using namespace Gecode;class NoneMin : public Bra…

oracle约束

约束 Including Constraints在数据库中使用约束(constraints)是为了在该数据库中实施所谓的"业务规则"其实就是防止非法信息进入数据库,满足管理员和应用开发人员所定义的规则集.ORACLE 使用完整性约束(integrity constraints)防止不合法的数据写入数据库,管理员和开…

201671010110 2016-2017 2《java程序设计》

从开学到现在已经是第二周学习java这个新语言了&#xff0c;从开始的完全陌生到现在慢慢了解了它的很多基本知识。就拿标识符来说吧&#xff01;和c语言有相同也有不同&#xff0c;java的标识符由字母下划线&#xff0c;最特别的就是它还有美元符号&#xff0c;数字组成&#x…

Linux 下 C 语言编程

Linux 下 C 语言编程 原著&#xff1a;Rick McMullin 前言 Linux的发行版中包含了很多软件开发工具. 它们中的很多是用于 C 和 C应用程序开发的. 本文介绍了在 Linux 下能用于 C 应用程序开发和调试的工具. 本文的主旨是介绍如何在 Linux 下使用 C 编译器和其他 C 编程工具,…

[Linux]C++编程工具

1、编辑器vi&#xff1a;最基本的编辑器&#xff0c;功能比较弱&#xff0c;但是比较容易使用。不需要XWindows。emacs&#xff1a;没有XWindow的前提下&#xff0c;功能比较强大的一个编辑器&#xff0c;比较难用。gedit&#xff1a;XWindow下比较好的一个编辑器。2、编译器gc…

C#.NET抽象类和接口的区别?

声明方法的存在而不去实现它的类被叫做抽象类&#xff08;abstract class&#xff09;&#xff0c;它用于要创建一个体现某些基本行为的类&#xff0c;并为该类声明方法&#xff0c;但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量&#xff0c…

【HTTP】---HTTP状态码详解

https://en.wikipedia.org/wiki/List_of_HTTP_status_codes 1、百科名片 HTTP状态码&#xff08;HTTP Status Code&#xff09;是用以表示网页服务器HTTP响应状态的3位数字代码。它由 RFC 2616 规范定义的&#xff0c;并得到RFC 2518、RFC 2817、RFC 2295、RFC 2774、RFC 4918等…

Linux系统下C语言编程工具详细介绍

Linux的发行版中包含了很多软件开发工具。 它们中的很多是用于 C 和 C应用程序开发的。 本文介绍了在 Linux 下能用于 C 应用程序开发和调试的工具。 本文的主旨是介绍如何在 Linux 下使用 C 编译器和其他 C 编程工具, 而非 C 语言编程的教程。在本文中你将学到以下知识&#x…