【VC++开源代码栏目提醒】:网学会员,鉴于大家对VC++开源代码十分关注,论文会员在此为大家搜集整理了“毕业设计(论文)-基于OpenCV的视频监控系统 - 产品手册”一文,供大家参考学习!
目 录1.绪论 ...................................................................................................................................... 12.OpenCV 的编程环境 ......................................................................................................... 3 2.1 OpenCV 简介 ................................................................................................................... 3 2.2 OpenCV 环境介绍 ........................................................................................................... 5 2.2.1 OpenCV 的基本结构 ............................................................................................... 5 2.2.2 OpenCV 的特征........................................................................................................ 6 2.3 安装 OpenCV ................................................................................................................... 7 2.3.1 安装 OpenCV1.0 ...................................................................................................... 7 2.3.2 配置 Windows 环境变量 ......................................................................................... 9 2.3.3 配置
VC6.0 环境与全局设置........................................................................... 11 2.3.4 项目设置 ................................................................................................................. 113.OpenCV 的体系结构 ....................................................................................................... 13 3.1 OpenCV 中的常用数据结构体系 ................................................................................ 13 3.2 OpenCV 中常用类体系................................................................................................. 14 3.3 OpenCV 处理图像
常用的函数 .................................................................................... 144.视频处理 ............................................................................................................................ 17 4.1 对视频进行读写处理.................................................................................................... 17 4.1.1 获取摄像头并显示视频图像 ................................................................................ 17 4.1.2 对获取的视频进行保存 ........................................................................................ 19 4.1.3 读取 AVI 视频 ........................................................................................................ 20 4.2 小结 ................................................................................................................................ 205.运动目标监控系统的研究与实现 ................................................................................. 21 5.1 运动目标监控系统 ........................................................................................................ 21 5.2 基于背景建模的图像处理 ........................................................................................... 23 5.2.1 背景生成算法......................................................................................................... 23 5.2.2 对捕获的图像帧的处理 ........................................................................................ 26 5.3 运动物体监控的实现.................................................................................................... 30结束语 ...................................................................................................................................... 34致 谢 ...................................................................................................................................... 35参考文献 .................................................................................................................................. 36附录(源
代码) ..................................................................................................................... 37 1.绪论 20 多年来,视频监控系统经历了从第一代百分之百的模拟系统(VCR),到第二代部分数字化的系统(DVR/NVR),再到第三代完全数字化的系统(网络摄像机和视频服务器)三个阶段的发展演变。
在这一过程中,视频监控系统与设备虽然在功能和性能上得到了极大的提高,但是仍然受到了一些固有因素的限制,其中既包含人类作为监控者自身在生理上的弱点,也包含视频监控系统配置和以及视频监控设备在功能和性能上的局限性。
这些限制因素使各类视频监控系统均或多或少的存在报警精确度差、误报和漏报现象多、报警响应时间长、录像数据分析困难等缺陷,从而导致整个系统在安全性和实用性的降低。
近年来,随着网络带宽、计算机处理能力和存储容量的迅速提高,以及各种视频信息处理技术的出现,全程数字化、网络化的视频监控系统优势愈发明显,其高度的开放性、集成性和灵活性为视频监控系统和设备的整体性能提升创造了必要的条件,同时也为整个安防产业的发展提供了更加广阔的发展空间,崭新的应用模式和市场机遇不断涌现,而智能视频监控则是网络化视频监控领域最前沿的应用模式之一。
智能视频监控技术能够对场地进行智能的监控,与传统的视频监控技术相比具有许多优点。
首先,传统的视频监控系统虽然已经可以满足人们“眼见为实quot的要求,但这种监视
系统要求监控人员不停地监视屏幕以获得视频信息,通过人为的理解和判断得到结论,并做出相应决策,监控人员长期盯着众多的电视监视器成了一项非常繁重的任务。
智能视频监控技术的应用则完全改变了这一模式。
其通过前端功能强大的分析模块,自动对视频图像进行分析,得到处理结果。
此外,运用智能视频监控技术还能大大提高系统响应速度,降低事件误报的概率。
智能视频监控具有强大的视频分析处理能力,能够有效地降低无用信息对监控人员的千扰,精确地分析异常事件类型特征,在最短的时间内分析出结果。
正是由于智能视频监控技术具有使用方便、监测面积广、设备简单、响应速度快等优点,其取代传统监控技术的趋势越来越明显。
智能视频监控技术是计算机视觉领域一个新兴的研究课题。
它是指对监控点某个范围内场景的监控,是一种新的侵入探测技术。
智能视频监控采用计算机对视频监控信号进行分析,提取目标检测区域内运动物体的活动特征与活动信息,将这些内容与设定的报警规则相比较。
当满足报警条件时即发现异常行为,如不允许侵入的区域出现了侵入行为等,自动产生报警信号。
视频智能监控系统是一个庞大、复杂的系统,其关键技术包括了多视频融合和运动检测等方面,涉及计算机视觉、图像处理、模式识别和人工智能等许多学科的内容。
其中,运动检测、属于图像处理的范畴,是初级层次的处理,是视频监控系统中研究较多的问题;图像分析和理解属于人工智能的范畴,是高层次的处理,是近年来被广泛关注的 第 1 页 共 44 页研究热点。
自上个世纪末期开始,国外科研工作者在视频监控领域进行了大量的研究探索
工作,取得了很多成果,并多次召开与此相关的国际会议和研讨会。
欧美等发达国家还在这一领域内展开了一些大型项目的研究,如美国国防高级研究计划局资助研制的视频监视与监控系统 VSAM,该系统以卡内基梅隆大学为首,麻省理工学院等高校参与,目标是开发自动视频理解技术,用于实现未来战争中那些人力监控费用昂贵、具有高度危险或者人力无法到达的场所的监控;欧盟也资助研发了 PRISMATICA 系统,该系统融合了多种智能监控检测设备,主要应用于地铁站的安全监控。
国内在这一方面起步较晚。
目前国内使用的视频监控系统大部分均侧重于对视频数据的
压缩、存储和传输,视频终端接收到数据后需要由人来实时监测分析,耗费了大量的人力物力,远远无法满足人们对监控系统日益增长的智能化要求。
直到 2004 年,一种基于视频运动分析检测技术的入侵探测器开始在我国出现,但核心技术仍然是从国外引进,国内技术还不足以转化成产品。
不过可喜的是国内有很多研究单位或机构都对此技术进行了研究,并取得了很好的研究成果。
中国南京新奕天科技有限公司Topsky与香港大学合作开发出了一款高性能智能视频监控设备—ⅦinkSman,该设备不仅能精确检测出多个移动目标,还能满足禁区、入侵检测等特定的安全需求。
第 2 页 共 44 页 2.OpenCV 的编程环境 本章将介绍 OpenCV 及其环境还有帮助工具的使用,说明 Visual C下的安装与配置,介绍基于 OpenCV 编程时常用的基本类和基本函数,初步了解 OpenCV应用程序的开发过程,最后通过实例来说明如何在 Visual C集成环境下快速建立应用程序框架。
2.1 OpenCV 简介 它由一系列 C 函数和少量 C OpenCV 是 Intel 公司资助的
开源计算机视觉库。
类构成,实现了图像处理和计算机视觉方面的很多通用算法。
其重要重要特性包括: 拥有包括 300 多个 C 函数的跨平台的中、高层 API。
它不依赖于其它的外部库—尽管也可以使用某些外部库。
对非商业应用和商业应用都是免费FREE的。
为 Intel Intergrated Perfomance PrimitivesIPP提供了透明接口。
这意味着如果有为特定处理器优化的的 IPP 库,OpenCV 将在运行时自动加载这些库。
在过去的十年,随着处理器速度和内存容量以摩尔定律增长,计算机视觉的研究和应用也得到了迅速的发展。
以往传统的开发方法要求工程人员在完成的硬件设计的同时,自己编码实现所有底层的算法,所有的图像处理函数都要从头编写,既造成时间和精力上的浪费,又难以保证稳定性、实用性和通用性,越来越难以满足现实的需求。
为了解决理论到应用的难题,出现了众多的计算机视觉和图像处理软件包。
大多数软件包是用 C/C编写的。
例如,TargetJr 及其后续版本VXLthe Vision something LIbrarise就是这样一个 C库的集合,在满足的小型、快速和稳固的系统的开发要求的同时提供了多平台移植性。
Gandalf 提供了计算机视觉和数值计算库,适合于可移植平台的视觉应用软件的开发。
Delft 科学图像处理库 DIPlib 是另一个科学图像处理 C 程序库.包含了许多图像数据多维分析和处理函数。
同时许多商用图像处理和
计算机视觉软件包也得到相应开发。
MVTec 公司开发的 HALCON 是其中之一,它包含了 C/C
代码的图像处理库。
LabView 在 Nl图像处理硬件的支持下能加速图像处理。
由微软公司开发的 SDK 是一个底层的图像操作分析的 C库。
在 Matlab 中的图像处理工具包以及在 Mathematica 中的数字图像处理软件包都是较为强大的图像处理工具,同时这两个软件包兼有许多高 由级数学计算功能。
Aurora 公司开发的 LEADTOOLS 是一套商用化计算机视觉包,它包括了图像处理服务器开发工具。
允许用户创建各种基于
网络的图像处理服务程序。
这些软件包为计算机图像分析和机器视觉提供了极大的便利,但也存在不足之处。
第 3 页 共 44 页 大多数软件包没有高级数学计算函数。
并且这些软件包都不包括如目标跟踪、摄像机标定、姿态识别、脸谱识别和三维重建等高层函数。
Matlab 是功能较为强大的科学计算和分析平台,它提供了图像处理工具包,也提供了较为丰富的数学计算函数,但在 Matlab 环境下的运行速度令人担忧。
虽然 Matlab 可以通过编译器将 m 文件转化为 C
代码。
但是转换后的 C
代码的执行效率和可读性存在较大
问题。
除 Matlab 和 LEADTOOLS。
大部分
软件包不支持网络服务器结构的应用程序的开发Matlab 的网络接口机制较为复杂,且同样存在运行效率的问题。
绝大多数软件包不支持可嵌人性。
本文选取 OpenCV 进行视频序列图像运动分析,与上述软件包相比,OpenCV的优势在于:纯 C
代码,源
代码开放。
开放源
代码open source是信息技术界从 20世纪 80 年代开始兴起的新名词。
源
代码是由软件命令电脑执行指定动作的程序语句,是一个软件的核心所在,最著名的
开源软件当属芬兰人林努斯托尔瓦兹提出的 Linux。
开源软件之所以能够风靡世界,首先是其
开源的
免费特性此外,由于有全球众多编程者的参与,
开源软件一般具有简约精炼、资源占用少、功能集中和安全性好的优点。
不同于以往各种由业余爱好者凭兴趣或是根据自己的项目要求而制作的源
代码开发包,OpenCV 是由 Intel 资助的
开源项目,其
代码规范而且具备良好的后继开发和改进能力。
丰富的函数功能,强大的图像和矩阵运算能力: OpenCV 提供了数组、序列、矩阵、树等基本结构,也包含了差分方程求解、傅立叶分析、积分运算、特殊函数等众多高级数学计算函数,以及各种图像处理操作和目标跟踪、摄像机校准、三维重建等高级视觉函数。
平台无关性:基于 OpenCV 开发的程序可以直接在 Windows、Unix、Linux、MacOSX、solaris、HP 等平台之间相互移植,无需对
代码进行任何修改。
程序运行的实时性:完成调试的
代码可以编译连接成二进制可执行文件。
从而得到较快的运算速度,满足实时性运算的要求。
方便灵活的用户接口。
OpenCV 作为一个开放的计算机视觉函数库在使用上必然没有 Matlab 那样解释执行来得方便,而 softhitegration 将 CH 和 OpenCV 绑定起来推出的 CH OpenCV,解决了这一使用上的瓶颈。
CH 本身是一种嵌入式跨平台的 C/C 一脚本解释器,有自己的外壳
程序,可以应用于 2D/3D 绘图、数值计算、分布式网络运算。
CH OpenCV 具有以下特性: 1.交互性:如同 Matlab,CH OpenCV 是交互式的。
代码不需要编译就能解释执行。
适合于快速建模和应用程序开发。
同时为游动
代码的计算机视觉提供了可能。
2.强大的扩展功能:通过 Ch SDK。
可以使现在所有的 C/C动态库、静态库和模块成为 Ch 函数库的一部分.因此 Ch 函数库的扩充潜能几乎是无限的。
先前提及的所有计算机视觉软件包都能成为 CH OpenCV 补充部分。
3.Web 实现性:类似于 ASP 和
Java 服务程序。
Ch 提供了 CGI 通用网关接口。
第 4 页 共 44 页为 CH OpenCV 提供了基于
web 的计算机视觉服务器的开发手段。
4.可嵌入性:与 C/C一编译器不同。
Ch 能嵌在 C/C应用程序和硬件的机器脚本中。
它为用户减轻了开发维护应用程序庞大机器
代码的沉重负担。
统一的结构和功能定义,基于 Intel 处理器指令集开发的优化
代码。
可见,作为一个基本的图像处理、计算机视觉和模式识别的
开源项目 OpenCV可以直接应用于很多领域,作为二次开发的理想工具。
本
设计用 OpenCV 的版本为 OpenCV1.0。
2.2 OpenCV 环境介绍 Visual C是 Microsoft 公司开发的基于 Windows 操作系统的编程工具。
像其他的可视化开发环境一样,
VC集程序的
代码编辑、编译、链接和调试于一体,给编程人员提供了一个完整而又方便的开发环境,和许多有效的辅助开发工具。
同时,因为
VC是微软的产品,用它来编写 Windows 程序有强大的程序接口和丰富的开发资源的支持,加之
VC严谨的内存管理,在堆栈上良好的分配处理,生成
代码的体积小,稳定性高的优点,Visual C就成为目前主流开发工具。
由于OpenCV 的
代码是用 C 和 C所编写而且完全开放,因此可以在 Microsoft VisualStudio 环境下很方便地使用 OpenCV 所提供的库来进行图像处理。
在介绍 OpenCV编程环境之前,首先要来了解如何安装 OpenCV 和基本的编程软件,下面的说明假设已经安装完成 Microsoft Visual C 6.0.2.2.1 OpenCV 的基本结构纷飞 OpenCV 主体分为五个模块,其中四个模块如图 2-1 所示。
OpenCV 的 CV 模块包含基本的图像处理函数和高级的计算机视觉算法。
ML 是机器
学习库,包含一 HighGUI 包含图像和视频输入/输出的函数。
些基于统计的分类和聚类工具。
CXCore包含 OpenCV 的一些基本数据结构和相关函数。
第 5 页 共 44 页 HighGUI CV MLL GUI 图像和视频输入/ 图像处理和视觉算 统计分类器 输出 法 CXCORE 基本结构和算法、XML 支持、绘图函数 图 2.1 OpenCV 的基本结构 图 2-1 中并没有包含 CvAux 模块,该模块中一般存放一些即将被淘汰的算法和函数如基于嵌入式隐马尔可夫模型的人脸识别算法,同时还有一些新出现的实验性的算法和函数如背景和前景的分割。
2.2.2 OpenCV 的特征 OpenCV 的主要特征有以下几个方面: 1图像数据的操作 分配、释放、复制、设置和转换。
2图像是视频的输入输出 I/O (文件与摄像头的输入、图像和视频文件输出)。
3矩阵和向量的操作以及线性代数的算法程序(矩阵积、解方程、特征值以及奇异值等)。
4各种动态数据结构(
列表、队列、集合、树、图等)。
5基本的数字图像处理(滤波、边缘检测、角点检测、采样与差值、色彩转换、形态操作、直方图、图像金字塔等)。
6结构分析(连接部件、轮廓处理、距离变换、各自距计算、模板匹配、Hough变换、多边形逼近、直线拟合、椭圆拟合、Delaunay 三角划分等)。
7摄像头定标(发现与跟踪定标模式、定标、基本矩阵估计、齐次矩阵估计、立体对应)。
8运动分析(光流、运动分割、跟踪)。
9目标识别(特征法、隐马尔可夫模型:HMM)。
10基本的 GUI (图像与视频显示、键盘和鼠标事件处理、滚动条)。
11图像标注(线、二次曲线、多边形、画文字) 第 6 页 共 44 页2.3 安装 OpenCV 本节介绍 OpenCV 的安装与环境配置。
2.3.1 安装 OpenCV1.0 要将 OpenCV 安装到 C:Program FilesOpenCV。
在安装时选择quot将OpenCVbin加入系统变量quot(AddOpenCVbin to the systerm PATH)。
图 2.2 安装界面 第 7 页 共 44 页图2.3 选择安装目录图2.4 选择附加任务 第 8 页 共 44 页 图2.5 安装进度2.3.2 配置 Windows 环境变量 检查 C:Program FilesOpenCVbin 是否已经被加入到环境变量 PATH,如果没有,请加入。
加入后需要注销当前 Windows 用户(或重启)后重新
登陆才生效。
可以在任务管理器里重启 explorer.exe 第 9 页 共 44 页 图2.6 系统属性图2.7 查看环境变量 第 10 页 共 44 页2.3.3 配置
VC6.0 环境与全局设置 在菜单 Tools-gtOptions-gtDirectories:先设置 lib 路径,选择 Library files,在下方填入路径: C:Program FilesOpenCVlib 然后选择 include files,在下方填入路径: C:Program FilesOpenCVcxcoreinclude C:Program File.