摘要:
多年来在从事视频监控技术研究的过程中,一直需要这样一个平台,一方面可以提供众多成熟的检测、跟踪、轨迹分析算法,另一方面具备良好的编程接口,这样就可以将自己的算法很方便的嫁接进这个系统,测试和对比各种算法的优劣性能。而OpenCV 视频监控模块(Video Surveilance)恰恰提供了这样一个功能强大的平台,在下文中简称为VS。从Intel OpenCV1.0开始,辅助库CVAUX中增加了VS模块内容,直至OpenCV2.1版本,该模块都相对稳定的存在。在OpenCV1.0和1.1版本中,VS的代码存在于CVAUX中,(OpenCV\cvaux\src\vs)。然而OpenCV提供相关资料
阅读全文
posted @ 2011-12-23 20:17
carekee
阅读(748)
推荐(0)
编辑
摘要:
(1)跟踪器的建立:对新产生的目标,且宽(高)大于5时,建立跟踪器(2)Kalman滤波:用Kalman滤波器对目标当前的方位、大小做出预测目标特征矢量采用(x, y, dx, dy, w, h)六维矢量,观测矢量为(x, y, w, h) 系统状态转移矩阵: 1, 0, 0,0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1 观测矩阵: 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
阅读全文
posted @ 2011-12-23 20:16
carekee
阅读(187)
推荐(0)
编辑
摘要:
如前面说到的,OpenCV VS提供了6组算法的接口,分别是:前景检测、新目标检测、目标跟踪、轨迹生成、跟踪后处理、轨迹分析,除了轨迹生成用于轨迹数据的保存以外,其他5个部分都是标准的视频监控算法体系中不可或缺的部分。 OpenCV在Blob_Tracking_Modules.doc文档中,提供了算法的关系图,如下。图中唯独缺少了轨迹分析部分,可能是因为在该文档形成的时候轨迹分析部分还没有完成。重新整理后如下。 下面针对VS算法体系中的各个算法接口进行介绍,并给出算法的参考文献。1 算法流程控制(CvBlobTrackerAuto) 整个视频监控算法流程的设置和数据的传递在接口类CvBlobT
阅读全文
posted @ 2011-12-23 20:16
carekee
阅读(501)
推荐(0)
编辑
摘要:
OpenCV VS与普通OpenCV函数不同在于:普通cxcore、cv函数均是C函数,而VS是利用C++的接口、多态、继承等技术构建起来的体系,由一些类、结构、全局函数组成。所以要学习和使用VS,要有较强的C++基础。“勿在浮沙筑高台”,如果不懂接口、多态、继承等C++的基本技术,还是去恶补一下再回来。打开opencv.dsw工程,可以在CVAUX下看到许多结构和类定义,VS部件多数以CvBlob开头,如图所示。这么庞杂的数据结构和类,理清头绪并不是一件容易的事情。我简单的归纳了一个UML图,虽然有很多不完善,但是可以方便读者们从全局看清VS的架构。类似于MFC中的CObject,VS中的所
阅读全文
posted @ 2011-12-23 20:15
carekee
阅读(435)
推荐(0)
编辑
摘要:
CvBlobDetector用于检测和判定当前帧中的Blob是否是新产生的目标,方法如下:
阅读全文
posted @ 2011-12-23 20:15
carekee
阅读(669)
推荐(0)
编辑
摘要:
二值图像的空洞定义为与图像边界不相连的背景成分集合。这意味着与图像边界相连的背景成分补集的输出为空洞抑制后的图像,可以通过腐蚀重建实现。其中掩模图像等于输入图像,而标记图像为与输入图像具有相同边界并具有常数 的图像。该方法同样适用于灰度图像。二值图像 空洞填充灰度图像 空洞填充 函数:lhMorpFillHole说明:空洞的填充参数:src 输入图像dst 输出图像源码:void lhMorpFillHole(const IplImage* src, IplImage* dst){ IplImage *temp = cvCloneImage(src); double min, max; cvM
阅读全文
posted @ 2011-12-23 20:05
carekee
阅读(1902)
推荐(0)
编辑
摘要:
判断点在线的左边还是右边在构建三角网时是非常重要的以及两点p1(x1,y1),p2(x2,y2),判断点p(x,y)在线的左边还是右边。1.bool LeftOfLine(const ZCoord2D& p, const ZCoord2& p1, const ZCoord2D& p2){ double tmpx = (p1.x - p2.x) / (p1.y - p2.y) * (p.y - p2.y) + p2.x; if (tmpx > p.x)//当tmpx>p.x的时候,说明点在线的左边,小于在右边,等于则在线上。 return true;retur
阅读全文
posted @ 2011-12-23 15:42
carekee
阅读(13560)
推荐(2)
编辑