OpenCV 视频监控(Video Surveilance)的架构

OpenCV VS与普通OpenCV函数不同在于:普通cxcore、cv函数均是C函数,而VS是利用C++的接口、多态、继承等技术构建起来的体系,由一些类、结构、全局函数组成。所以要学习和使用VS,要有较强的C++基础。“勿在浮沙筑高台”,如果不懂接口、多态、继承等C++的基本技术,还是去恶补一下再回来。

打开opencv.dsw工程,可以在CVAUX下看到许多结构和类定义,VS部件多数以CvBlob开头,如图所示。这么庞杂的数据结构和类,理清头绪并不是一件容易的事情。我简单的归纳了一个UML图,虽然有很多不完善,但是可以方便读者们从全局看清VS的架构。

OpenCV 视频监控(Video Surveilance)的架构_第1张图片

类似于MFC中的CObject,VS中的所有的类都有一个共同的父类CvVSModule,主要提供参数的读写、拷贝等功能。另外还有几个算法接口类,分别是:CvFGDetector,CvBlobDetector ,CvBlobTracker,CvBlobTrackGen,CvBlobTrackPostProc,CvBlobTrackAnalysis,分别代表:前景检测、新目标检测、目标跟踪、轨迹生成、跟踪后处理、轨迹分析等几组算法的接口,这些类是绝大多数VS类的父类。另外还有一个CvBlobTrackerAuto接口,其功能是对以上算法的链接、调度,即对整个算法流程的控制。

    VS中的很多类并没有直接提供给用户使用,多数只提供一个全局函数作为唯一的用户接口,这种思想也大量应用于COM技术中,是模式设计中类工厂的思想。感兴趣的读者可以查阅模式设计方面的图书和资料。

你可能感兴趣的:(智能视频分析)