基于OpenCv的车流视频检测系统设计_第1页
基于OpenCv的车流视频检测系统设计_第2页
基于OpenCv的车流视频检测系统设计_第3页
基于OpenCv的车流视频检测系统设计_第4页
基于OpenCv的车流视频检测系统设计_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

江 西 理 工 大 学本 科 毕 业 设 计(论文)题 目:基于OpenCv的车流视频检测学 院:信息工程学院专 业:计算机科学与技术班 级:082学 号:20082242学 生:娄亚明指导教师:罗会兰 职称:副教授时间:2012年5月24日江 西 理 工 大 学本 科 毕 业 设 计(论文)任 务 书信息工程学院 计算机专业 08级(2012届)082班 学号20082242 学生 娄亚明题 目:基于OpenCv的车流视频检测原始依据:在日常生活中,视频对我们并不陌生,例如我们经常会拍照,然后把照片上做成幻灯片或者视频,又或者是我们很喜欢某段视频,但其中有公告之类的我们不想要的部分或是想添加某些视频帧,这时我们就需要对其进行编辑。这些简单的应用,都涉及到来图像流或者说是视频的处理。说的更深一些,在交通录像中或车间的视频监控中我们需要对某些特定的目标进行检测以便更好的进行信息采集,这时就非常有必要对视频进行一些特殊处理。在本次的毕业设计中,我们将在VC的开发环境中结合OpenCv进行一些车流视频的处理。OpenCv(Open Source Computer Vision Library)作为一个开源计算机视觉库融合大量的数字图像处理算法,它以一个类似于插件的形式配置在Visual C+ 6.0上就可以进行图像的各种复杂处理。而本次毕业设计的内容是车流视频检测,可以看作是动态图像流的处理,从而运用OpenCv进行处理可以大大简化,从而提高了开发效率。在开发中,我们以C+语言为主,C语言为辅(在OpenCv中混合的C/C+接口头文件扩展名为“.h”,纯C+接口头文件扩展名为“.hpp”.)。由于在大学中对C语言有足够多的接触,C+也有所涉及,所以此次开发的更多任务在于视频的分割和处理。应用环境:本次毕业设计基于Windows平台,以VC+6.0为开发环境来模拟交通路口运动车辆的检测与统计。 工作目的:对一段车辆监控录像(视频)进行检测,找出运动车辆并标记出来,统计运动车辆数量。其实它可以找出任何动态图像流(当然包括视频文件)里的态目标进行标记跟踪并统计出运动目标的数目。设计内容:本次毕业设计的内容主要是对一段车流视频进行目标检测,技术上说是数字图象处理应用的延伸,具体地将就是通过数字图象处理技术对一段路口视频进行帧过滤检测,主要是找出运动车辆并作出标记,然后统计这段视频总共有多少运动车辆并进行对话框输出。为了不失一般性,该视频将通过MFC界面设定读入,而不是固定的某段视频或动态图片。主要指标:通过MFC界面读入视频文件(目前只能是avi格式);找出运动目标并作出标记;统计出远动车辆数目并进行对话框输出。日程安排: 第1-2周:熟悉课题,确定开发平台和开发工具第3-4周:熟悉OpenCv函数库并搭建开发环境第5-9周:完成需求分析并研究视频检测的各种方法第10-12周:编写代码实现目标需求第13-15周:进一步完善功能并撰写论文主要参考文献和书目:1张铮,王艳平,薛桂香著数字图像处理与机器视觉Visual C+ 与 Matlab 实现M.北京:人民邮电出版社,20102张德丰著数字图像处理(MATLAB版)M. 北京:人民邮电出版社,19903陈胜勇,刘盛等著基于OpenCv的计算机视觉技术实现M .北京:科学出版社,2008 4刘瑞祯,于仕琪著OpenCv基础篇M .北京:北京航空航天大学出版社,20075秦小文,温志芳,乔维维著基于OpenCv的图像处理J.电子测试,2011,07期6布拉德斯基 (Bradski.G.), 克勒 (Kaehler.A.)著学习OpenCvM.北京: 清华大学出版社, 20097Gary Bradski, Adrian Kaehler著Learning OpenCv: Computer Vision with the OpenCv LibraryM.Cambridge, Massachusetts,USA,20088周涛,张继业著视频图像的处理与检测J.计算机工程与应用,2011,19期9Richard E.Woods,Rafael C. Gonzalez著Digital Image Processing M. Upper Saddle River, New Jersey, USA:Prentice Hall,199010Robert Laganire著OpenCv2 Computer Vision Application Programming Cookbook MBirmingham, UK:George Fewness,2011 指导教师(签字): 年 月 日本 科 毕 业 设 计(论文)开 题 报 告信息工程学院 计算机专业 08级(2012届)082班 学号20082242 学生 娄亚明题 目:基于OpenCv的车流视频检测课题来源及研究现状:随着计算机硬件技术的快速更新,其对应的应用软件也逐步渗透到各个行业,特别是数学建模研究的日益深入,数字图象处理(DiigitalImage Processing)作为一个独立的应用技术应运而生。它主要是应用计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理,当然对视频(动态图片)的处理也包含在内。OpenCv(Open Source Computer Vision Library)作为一个开源计算机视觉库融合大量的数字图像处理算法,它以一个类似于插件的形式配置在VC6.0上就可以进行图像的各种复杂处理,完美的展现了现在集成(对象)编程的便捷。本课题源于生产实习数字图像处理技术研究的拓展,在上次的生产实习中第一次接触OpenCv和VC+并实现了对静态图像的边缘检测,从而切实感受到了OpenCv在数字图像处理方面的强大,所以想借毕业设计的机会再次研究OpenCv进而对图像流(视频)进行检测处理。研究目标:对一段车辆监控录像(视频)进行运动目标检测,找出运动车辆并标记出来,统计运动车辆数量并进行对话框输出。当然也可以只跟踪检测一小段视频,所以必须实现对视频文件播放的进程控制。研究内容:本次毕业设计的内容主要是对一段有车流的视频进行目标检测,具体地就是通过数字图象处理技术对一段车流视频进行过滤检测,主要是找出运动车辆并作出标记,然后统计这段视频总共有多少运动车辆并进行对话框输出。研究方法:为了更好的完成课题研究,本人首先对VC6的开发平台进行了解,然后借阅了OpenCv的有关书籍进行环境搭建和程序调试,特别是对有关图像处理的库函数进行了了解认知。另外,我还研究了OpenCv的官方网站和一些个人博客上的相关视频处理方法,最后以C+作为编程语言进行开发。研究手段:Windows平台 Visual C+6.0环境 OpenCv内置算法 日程安排:第1-2周:熟悉课题,确定开发平台和开发工具第3-4周:熟悉OpenCv函数库并搭建开发环境第5-9周:完成需求分析并研究视频检测的各种方法第10-12周:编写代码实现目标需求第13-15周:进一步完善功能并撰写论文第16周:准备毕业答辩并定稿主要参考文献和书目:1张铮,王艳平,薛桂香著数字图像处理与机器视觉Visual C+ 与 Matlab 实现M.北京:人民邮电出版社,20102张德丰著数字图像处理(MATLAB版)M. 北京:人民邮电出版社,19903陈胜勇,刘盛等著基于OpenCv的计算机视觉技术实现M .北京:科学出版社,2008 4刘瑞祯,于仕琪著OpenCv基础篇M .北京:北京航空航天大学出版社,20075秦小文,温志芳,乔维维著基于OpenCv的图像处理J.电子测试,2011,07期6布拉德斯基 (Bradski.G.), 克勒 (Kaehler.A.)著学习OpenCvM.北京:清华大学出版社, 20097Gary Bradski, Adrian Kaehler著Learning OpenCv: Computer Vision with the OpenCv LibraryM.Cambridge, Massachusetts,USA,20088周涛,张继业著视频图像的处理与检测J.计算机工程与应用,2011,19期9Richard E.Woods,Rafael C. Gonzalez著Digital Image Processing M. Upper Saddle River, New Jersey, USA:Prentice Hall,199010Robert Laganire著OpenCv2 Computer Vision Application Programming Cookbook MBirmingham, UK:George Fewness,2011指导教师审核意见:指导教师(签字): 年 月 日摘 要视频处理技术在当今的计算机应用中占有很重要的地位,例如我们平时所熟悉的路口流动车辆监控录像以及工厂里的操作流程监控等。在某些情况下我们需要把这些录像进行特殊处理,如找出车辆监控录像中的运动车辆或对某个车牌号进行跟踪等,这就要求我们对视频帧进行操作。对车流视频进行目标标记和流量统计从技术上说是数字图象处理应用的拓展,因为我们必须对视频进行帧分割然后才能进行各种操作,如二值化、高斯过滤、帧做差以及重绘等。在本次设计采用了Intel公司的一种用于数字图像处理和计算机视觉的函数库OpenCv,它集成大量的图像处理算法,如图像模式转换算法cvCvtColor、阀值操作算法cvThreshold以及中值滤波算法cvSmooth等。它的高度集成使得我们不需要自己去实现底层算法从而为我们的开发提供了相当大的便利。关键字:车流视频;目标标记;车流统计;OpenCvABSTRACTVideo processing technology plays an important role in todays computer applications, such as what we usually familiar crossroads flow monitoring vehicles and video process monitoring in the factory, etc. In some cases we need to put these video for special treatment, such as figuring out the movement of vehicles in the vehicle from the video or on a license plate number to track, which requires us to operate the video frame. Target marking and traffic statistics on traffic video is technically the expansion of the digital image processing applications, because we have to video for frame segmentation and then to perform various operations such as thresholding, Gaussian filtering, the frames do subtraction and redraw. In this design uses a function library OpenCv, which is designed by Intel Corporation for digital image processing and computer vision , it integrates a large number of image processing algorithms, such as image mode conversion algorithm cvCvtColor, threshold algorithm of the cvThreshold as well as median filtering algorithm cvSmooth and so on. Its high level of integration make we do not need to implement the underlying algorithms that provide a considerable convenience for our development. Keywords: Traffic video;Target marking;Traffic statistics;Opencv 目 录第一章 绪论11.1开发背景11.2视频处理概念11.3研究现状分析21.4小结3第二章 系统环境42.1软件介绍42.1.1 Microsoft Visual C+ 6.0简介42.1.2 OpenCv简介52.2环境搭建52.3开发语言介绍102.4小结11第三章 需求分析123.1引言123.2任务概述123.2.1功能概要123.2.2功能需求123.2.3非功能需求133.2.4领域需求133.3小结14第四章 概要设计154.1前言154.2算法概述154.3模块概述164.4程序框架174.5小结18第五章 详细设计195.1前言195.2功能模块与程序对应关系195.3视频处理流程205.4算法描述215.4.1概念介绍215.4.2算法分析215.5小结30第六章 系统实现316.1工程创建316.2模块代码346.3小结38第七章 结果测试407.1引言407.2测试结果407.2.1界面测试407.2.2加载视频407.2.3播放处理417.2.4暂停播放427.2.5播放停止437.2.6退出调试437.3测试小结44第八章 总结45参考文献46致 谢47江西理工大学2012届本科生毕业设计(论文)第一章 绪论1.1开发背景随着当今经济的高速发展,机动车的拥有量迅速增加以至交通状况不断恶化。现在无论哪个国家都毫无例外的受到不同程度的交通问题的困扰,在中国的大城市,这种情况尤为突出。它严重影响了人类生活的质量,也给环境、经济和社会带来了严重的后果。为从根本上解决交通拥挤堵塞的问题,政府开始运用各种手段限制或减缓机动车拥有量,同时也采取新技术对现有车辆进行检测控制,如信息技术、计算机技术、通信技术、控制技术等。这些技术将人、车、路紧密联系起来,不仅有效地解决了交通阻塞问题,而且对交通事故以及其他突发事件的应急处理都有了显著的效果。此时,智能交通(Inielligent TransPortation System,ITs)作为一个新的名词应运而生。智能交通是一个基于现代电子信息技术面向交通运输的服务系统,它的突出特点是以信息的收集、处理、发布、交换、分析、利用为主线,为交通参与者提供多样性的服务。智能交通系统一般包括四个子系统:车辆控制系统、交通监控系统、运营车辆高度管理系统以及旅行信息系统。每个系统使用的技术都有所不同,如车辆控制系统通过安装在汽车前部和旁侧的雷达或红外进行探测从而准确地判断车与障碍物之间的距离,而交通监控系统则类似于车床控制实时监控系统,它通过跟踪监测实时了解道路与车辆的情况。另外,运营车辆高度管理系统和旅行信息系统通过车载电脑、计算机与全球定位系统卫星联网,从而及时地提供各种控制信息。以上分析可以明显看出智能交通系统作为一个新的计算机应用领域正在切实影响着我们的生活质量。作为一个计算机专业的本科毕业生应该时刻关注计算机应用的新动态以便提前进入前端研发市场,从而为自己寻求一个新的发展起点。本次毕业设计既是对大学四年所学知识由理论到实际的一次汇总应用,又是对智能交通系统里的一个子系统交通监控系统进行模拟,更是对计算机在数字图像处理方面的一个探索。 1.2视频处理概念说到视频(video),我们会很快想到优酷、土豆等视频网站或者是rmvb、avi、flv等视频文件格式。从狭义上说,连续的图像变化每秒超过24帧(frame)以上时,根据视觉暂留原理,人眼无法辨别单幅的静态画面以至有了平滑连续的视觉效果,这样连续的画面即叫做视频。从广义上说,视频泛指将一系列静态影像以电信号方式加以捕捉、纪录、处理、储存、传送与重现的各种技术。而在生活中,我们经常需要对一些视频进行特殊处理,比如把一段电视剧视频中的广告剪辑掉,或者是对某段录像进行分割保存等,所有这些操作我们可以很自然的将其归结为视频处理。当用一种严谨的语言去概括时,视频处理是指在计算机上使用视频和音频剪贴工具对视频进行编辑、剪辑或者是增加一些很普通的特效效果以使视频可观赏性增强的一系列操作。1.3研究现状分析 在本次毕业设计的开发背景中我们提到智能交通,也知道我们这次研究的其子系统交通监控系统是应运社会发展而产生的,但只有当它与计算机应用充分结合时才衍生出我们所熟知的计算机视觉学科,或单纯的将其划分到为数字图像处理技术范畴。计算机视觉是一门研究如何使机器“看世界”的科学,或者说使用计算机对生物视觉进行模拟。具体地讲,就是使用摄影机或电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理:用电脑处理成为更适合人眼观察或传送给仪器检测的图像。运动目标的监测与跟踪作为图像处理与计算机视觉一个非常活跃的分支,它是在基于动态图像分析的基础上结合图像模式识别和图像跟踪方法对图像序列中的目标进行监测识别跟踪的过程。近年来,计算机视觉的研究重点己经从对静态图像的研究过渡到对动态图像序列的研究上面,这方面的典型应用包括自动化的视频监控系统、视频MPEG编解码技术、人机交互的感知接口、雷达视频图像中的目标分析。国外的视频检测技术研究开始的较早,经过十几年的发展其技术己经相当成熟,视频检测与线圈检测技术相比具有的稳定性和优越性己得到业内人士的公认,代表了未来车辆检测领域的发展和应用方向。国外的不少一些公司在这方面从事了应用研究和开发工作并推出了各自成熟的系统级产品,比如美国ITERIS公司Vantage系列视频车辆检测器及管理系统、美国WAVETRNONIX公司Smart Senser系列数字微波车辆检测器等。我国的视频车辆检测技术虽然起步比较晚,但经过这几年的研究也取得了一定的成果。比如北京漫波交通科技有限公司自成立以来一直致力于智能交通系统领域,专业从事视频车辆检测设备、交通信号控制设备、环境检测设备、交通数据采集系统、超限检测系统、车牌识别系统等智能交通方案以及技术提供服务。另外,中国智能交通系统(控股)有限公司也是中国领先的交通产业技术解决方案及服务提供商,已经实现了交通管理系统信息化、智能化、社会化的三化合一。虽然这些领军公司或个人一直在交通视频检测方面努力着,但其在实际的推广当中效果并不明显,还远远没有达到实际应用的要求,同国外的产品和服务相比还有一定差距。因此,我们在这方面的研究还要继续加强,不断开发和完善技术以推出真正适合我国国情的交通检测产品。视频车辆检测技术的真正难点是: 在背景不断变化的情况下,如何对目标进行精确图像分割,提高算法鲁棒性和实时性; 运动车辆的阴影和各个目标之间的相互干扰,造成运动目标信息的不完整,从而对目标识别带来一定困难; 不同视觉和场景光照的变化带来目标形状变化使得实时识别和跟踪非常困难,如何选择和提取具有不变性的特征有待提高。1.4小结在此部分客观透析了本次毕业设计的开发背景、课题的研究现状以及视频处理的概念,这些使得我们对课题有一个宏观上的认识。另外,在研究现状分析中提出了我们这次设计所需要面对的困难和挑战,这就要求我们在设计中必须有足够的耐心去调试,还要有所创新。第二章 系统环境2.1软件介绍在确定了设计课题后,我们要分析开发的可行性。其中可行性包括技术可行性、经济可行性和社会可行性。像开发这种功能相对单一的软件,我们一般不需要考虑经济可行性和社会可行性。而对于技术可行性我们除了要考虑自己的知识储备外,还要考虑我们开发所需要的硬件条件,特别是一些软件安装对电脑配置有严格要求。所以要根据自己的硬件配置去选择软件,比如VC有多个版本,而对于VC2005需要2G左右的空间,针对自己电脑其内存明显不能够满足要求,即使装上去也会运行缓慢,下面将对系统软件进行介绍。2.1.1 Microsoft Visual C+ 6.0简介Visual C+6.0:简称VC或VC6.0,由Microsoft开发。它不仅是一个C+ 编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。VC6由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。Visual C+作为Microsoft的主力软件产品,它是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出Visual C+1.0后,随着其新版本的不断问世,Visual C+已成为专业程序员进行软件开发的首选工具。虽然微软公司推出了Visual C+.NET(Visual C+7.0),但它的应用的很大的局限性,只适用于Windows 2000,Windows XP和Windows NT4.0。所以实际应用中,更多的是以Visual C+6.0作为开发平台。Visual C+6.0有一个很重要辅助软件开发包,即MFC。MFC(Microsoft Foundation Classes) 是微软基础类库的简称,是微软公司实现的一个C+类库。MFC封装了大部分的windows API函数,应用它可以很方便的实现图像化界面并实现按钮触发的控制,所以对编程效率有很大提高。另外,其实MFC不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关联一个窗口的动作,但它提供的类中有好多类不与一个窗口关联,即类的作用不是一个界面类,不实现对一个窗口对象的控制(如创建,销毁),而是一些在Windows(用MFC编写的程序绝大部分都在Windows中运行)中实现内部处理的类,如数据库的管理类等。因为在本次毕业设计中用到来了VC中的MFC组件,所以在此对其进行一些简要说明。2.1.2 OpenCv简介OpenCv(Open Source Computer Vision Library )于1999年由Intel建立,现在由Willow Garage提供支持。OpenCv是一个基于BSD许可证授权(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效由一系列 C 函数和少量 C+ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。OpenCv致力于真实世界的实时应用,通过优化的C代码的编写对其执行速度带来了可观的提升,并且可以通过购买Intel的IPP高性能多媒体函数库(Integrated Performance Primitives)得到更快的处理速度。其目标是构建一个简单易用的计算机视觉框架,以帮助开发人员更便捷地设计更复杂的计算机视觉相关应用程序。OpenCv包含的函数有500多个,覆盖了计算机视觉的许多应用领域,如工厂产品检测、医学成像、信息安全、用户界面、摄像机标定、立体视觉和机器人等。因为计算机视觉和机器学习密切相关,所以OpenCv还提供了MLL(Machine Learning Library)机器学习库。该机器学习库侧重于统计方面的模式识别和聚类(clustering),另外它还可以方便地应用于其他的机器学习场合。下面给出OpenCv的几个重要特征:OpenCv拥有包括300多个C函数的跨平台的中高层 API,它不依赖于 其它的外部库尽管也可以使用某些外部库;OpenCv对非商业应用和商业应用都是免费(FREE)的;OpenCv为Intel Integrated Performance Primitives (IPP) 提供了 透明接口。这意味着如果有为特定处理器优化的的 IPP 库,OpenCv 将 在运行时自动加载这些库。 2.2环境搭建由于本次毕业设计选用的是Microsoft Visual C+6.0,而OpenCv2.0的头文件所包含的C+语法比较新,使得VC6自带的C+编译器不支持这样的标准,所以在VC6下不可以配置OpenCv2.0及其以上版本。下面我们将对具体的环境搭建作出说明:首先安装Microsoft Visual C+6.0,基本按默认设置,在此不作说明;安装OpenCv1.0,运行的第一界面如图2-1,下面将程序安装在C:Program FilesOpenCv目录下(图2-2),在安装时要将添加至环境变量的复选框勾选(AddOpenCvbin to the systerm PATH),如图2-3:图2-1 OpenCv安装第一界面 图2-2 OpenCv安装第二界面图2-3 勾选环境变量配置Windows环境变量OpenCv安装完成后要检查一下“C:Program FilesOpenCvbin”是否已经被加入到环境变量PATH中,如果没有,请加入,其具体操作如下:在“我的电脑”鼠标右击选择属性,打开系统属性窗口,如图2-4:图2-4 打开环境变量在“高级”选项卡下点击“环境变量”,在变量名为Path的用户变量名下加上C:Program FilesOpenCvbin,效果如图2-5: 图2-5 配置环境变量配置好环境变量后,如果电脑没有重启或注销则需要在任务管理器里重启explorer.exe。配置Visual C+ 6.0首先进行全局设置,在菜单Tools-Options-Directories中先设置lib路径,选择Library files,在下方填入路径: C:Program FilesOpenCvlib然后选择include files,在下方填入路径: C:Program FilesOpenCvcxcoreincludeC:Program FilesOpenCvcvincludeC:Program FilesOpenCvcvauxincludeC:Program FilesOpenCvmlincludeC:Program FilesOpenCvotherlibshighguiC:Program FilesOpenCvotherlibscvcaminclude然后选择source files,在下方填入路径: C:Program FilesOpenCvcvsrcC:Program FilesOpenCvcxcoresrcC:Program FilesOpenCvcvauxsrcC:Program FilesOpenCvotherlibshighguiC:Program FilesOpenCvotherlibscvcamsrcwindows最后点击“ok”,全局设置完成。 其次进行项目设置,即每创建一个将要使用OpenCv的VC Project,都需要给它指定需要的lib。菜单:Project-Settings,然后将Setting for选为All Configurations,然后选择右边的link标签,在Object/library modules附加:cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib当然可以根据自己需要加上相应的模块库即可,一般只需要“cxcore.lib highgui.lib cv.lib”,为保险起见还是建议全部导入,操作如下图2-6(注意在粘贴的时候有一个空格)。图2-6 添加库文件环境测试,测试代码如下:#include #include #include int main(int argc, char *argv) IplImage *img = cvLoadImage(lena.jpg); cvNamedWindow(Image:, 1); cvShowImage(Image:, img); cvWaitKey(); cvDestroyWindow(Image:); cvReleaseImage(&img);return 0; 如果能够编译链接成功,则说明配置成功,否则检查前面的配置步骤,下面是该程序运行的效果如图2-7:图2-7 测试效果图2.3开发语言介绍本次开发主要采用C+语言,它可以看作是C语言的升级版,最主要的变革是实现了对象编程。C+作为一种静态数据类型检查的、支持多重编程范式的通用程序设计语言已被广泛的用于计算机程序开发,它主要有以下几个特点:C+设计成静态类型,同C语言一样高效且可移植; C+支持多种程序设计风格,比如程序化程序设计、资料抽象化、面向对象程序设计、泛型程序设计等; C+与C兼容,提供了一个从C到C+的过度;C+无需复杂的程序设计环境,避免了平台限定和额外开销。 2.4小结在一般的程序开发中,环境搭建都是一个非常重要的步骤,因为它与后期的代码调试和运行密切相关。对于OpenCv与VC6的环境搭建稍微有点复杂,但只要按步骤来进行还是很容易的。特别在此说明VC6.0下只能配置OpenCv1.0,对与VC2005或更高版本才可以配置OpenCv2.0,另外每次新建工程时一定要把OpenCv的库文件(lib)添加进去,否则将会出现缺少头文件的错误。第三章 需求分析3.1引言我们大部分人看来,项目开发就是编写代码,可实际上编写代码只是项目开发的一小部分,或者只是软件开发周期中的编码实现阶段。需求分析是指对要解决的问题进行详细的分析,弄清楚问题的要求,包括需要输入什么数据,要得到什么结果,最后应输出什么等。在软件开发的历史中,人们一直认为需求分析是软件功能中最简单的一个步骤,但随着系统开发的深入越来越多的人认识到需求分析是整个开发过程最重要的一个步骤。如果在需求分析阶段分析者未能正确认识到顾客需求的话将直接导致需求分析报告出错,整个项目开发所做的工作都将付之东流,其后果不堪设想。在此部分将给出一个相对客观的需求分析,这不仅为进一步设计和开发明确了方向,而且在最终的评价分析中也有了一个大概标准。3.2任务概述3.2.1功能概要本次毕业设计的课题是基于OpenCv的车流视频检测,具体地说就是运用某种技术对一段有车流的视频进行处理,其目的是要找出所选视频文件里的运动车辆并进行标记跟踪,在播放结束或播放过程中可以根据需要输出流动车辆的数目。另外,为了便于操作要有可视化界面,而且视频文件也必须可以自由选择从而避免结果造假。3.2.2功能需求功能需求(functional requirement)有时也被称作行为需求,它规定开发人员必须在产品中实现的软件功能,用户利用这些功能来完成任务,满足业务需求。在此我们对本次所要开发的系统做出如下功能需求:运行程序,出现可视化界面,用户可以根据按钮提示载入视频文件;载入视频后点击播放按钮可以看到视频中的运动车辆被做上标记并跟随 运动;点击暂停按钮可以暂停视频的播放并跳出对话框显示出车流量;视频播放完毕也会跳出对话框显示车流量,点击对话框的确定后将回到初 始加载视频时的状态;在视频播放过程中可以停止视频播放回到初始加载视频时的状态;调试运行完毕可以点击推出按钮,此时将会有确认对话框弹出以询问是否 要真的退出,点击确定后即可退出。3.2.3非功能需求非功能性需求,是指软件产品为满足用户业务需求而必须具有且除功能需求以外的特性。软件产品的非功能性需求包括系统的性能、可靠性、可维护性、可扩充性和对技术和对业务的适应性等,下面对其中的某些指标加以说明: 实用性:系统应能满足用户特定的需求、操作界面友好、方便、功能设置 符合用户的习惯和要求; 易维护:用户能够方便的管理系统,对系统中的各个功能能够进行相应设 置,同时较为详尽的文档说明; 开放性:系统在体系结构方面应遵循标准和开放的原则,以确保具有良好 的交互操作性、可移植和扩充性; 安全性:系统具备一定的抗攻击能力,不容易和其他程序交叉,也不会轻 易受到病毒攻击而无效 正确性:系统所完成的功能必须与需求说明规定的各种功能尽可能一致; 健壮性:系统在用户不合理的操作或输入情况下,必须能够继续正常运 行,并给出错误信息; 易使用性:系统界面友好,简单使用,容易掌握; 可理解性:程序编制要有规范化的格式,风格清晰易懂,注释说明应准确 详细。3.2.4领域需求本系统是一个小型的模拟性系统,仅适用于个人,但由于条件和技术所限,对运动目标的标记并不是很清晰甚至有的时候会把两个运动目标作为一个整体进行标记。另外,车流辆的统计也有一定误差,特别是对于流量比较小的视频其误差更大。因为系统小而能够进行的操作本来就不多,所以也没什么特别的限制,只要对其功能能够实现即可。3.3小结在此需求分析部分对任务概要做了系统分析,特别是其中的功能需求和非功能需求对我们的系统开发至关重要。在一般的需求分析中,非功能需求常常被轻视,甚至被忽视。其实,软件产品的分功能定义不仅决定产品的质量,而且很大程度上影响产品的功能需求定义。所以在以上部分非功能需求占了很大部分,这既是对所要开发的系统负责,也是对用户负责,下面将根据需求分析做进一步的概要设计。第四章 概要设计4.1前言此系统要在V6.0平台下实现对车流视频的检测,而我们知道视频文件的格式有很多,如rmvb、avi、flv等。但实际上在真正的视频处理时我们并不能将上述所列举的所有视频文件进行实现,而只能对avi文件进行处理,这些也都是微软的系列产品。另外还需要安装XviD视频编码解码器才可以对视频进行拆帧处理。在对帧进行处理时涉及到一些数字图象处理的常用算法,但这些算法都被OpenCv封装成了起来,所以只要了解算法的基本原理和功能并对其正确的进行调用就可以对所拆分的帧进行处理,从而实现对整个视频文件的处理。4.2算法概述说到车流的视频检测实际上是对运动目标的检测,一般可以实现的方法有四种,即:光流法、帧间差法、背景差法和背景估计法。下面将对其各种方法做一简要分析,然后确定对我们适合的方法。光流法:光流法通过计算三维运动场投影到二维图像平面内的速度场来区分运动目标和背景,一般包括连续光流法和特征光流法。其中连续光流法基于帧间图像强度守衡的梯度算法来计算光流,其优点是能得到连续的光流场,缺点是计算量大;而特征光流法通过匹配求的特征点处的光流,优点是对目标在帧间的运动限制较小,可以检测帧间移动较大的运动目标,而且对噪声敏感性降低;缺点是得到的是稀疏光流场,导致难以提取运动目标的精确形状,且特征匹配问题尚未得到较好的解决。帧间差法:如下图4-1,目标运动引起的运动变化区域包括运动目标在前后两帧中的共同位置(图中黑色区域)、在当前帧中新显露出的背景区域和新覆盖的背景区域三部分。 图4-1 帧间差效果背景差分法:背景差分法是采用图像序列中的当前帧和背景参考模型比较来检测运动物体的一种方法,其性能依赖于所使用的背景建模技术。在基于背景差分方法的运动目标检测中,背景图像的建模和模拟的准确程度,直接影响到检测的效果。不论任何运动目标检测算法,都要尽可能的满足任何图像场景的处理要求,但是由于场景的复杂性、不可预知性、以及各种环境干扰和噪声的存在,如光照的突然变化、实际背景图像中有些物体的波动、摄像机的抖动、运动物体进出场景对原场景的影响等,使得背景的建模和模拟变得比较困难。背景差分法假定背景是静止不变的,因此背景不随帧数而变,处理流程一般如图4-2:图4-2 背景差发流程背景估计法:背景估计法适用于背景静止情况下的视频分割,其主要基于两个假设:在背景静止的情况下,若外界光照条件不变,且在不考虑噪声的情况下,视频序列图像中的背景保持不变。根据其假设在静态场景的条件下视频序列图像中不包含目标的完整背景在每一帧都相同,由于运动目标会遮挡住一部分背景,所以每一帧中的背景并不等于完整背景,关键技术就是根据一定的准则从连续k帧图像中估计出该视频序列图像的完整背景。在目标可视的情况下,目标与背景的灰度之间存在着一定的对比度。根据其假设运动目标与背景之间的灰度存在着一定的对比度,因此在不考虑噪声的情况下,在差分图像中属于背景区域的像素的灰度值为零,从而检测出了运动目标。综上,视频检测的各种方法侧重点有所不同。其中光流法要用到三维投影,而且计算量也比较大,所以在此不采用。我们知道交通路面情况一般比较复杂,就单纯的看交通线也是会有变化的,所以如果想用背景差法明显行不通。同样,背景估计法也要求背景静止,所以同样对于车流视频分割行不通。由以上分析,如果要实现车流的视频检测我们选用帧间差法。4.3模块概述我们这次的系统开发很明确要实现车流视频的检测与流量统计,当然我们的输入就是车流视频(目前只支持avi格式),而输出则是经过处理(标记)后的视频和流量统计数据。考虑到大部分的使用者都不能很好的利用Dos命令进行视频文件的读入,我们在开发时必须注重系统的界面设计,既要实现预订功能又要有比较好的视图界面,使得开发者不需要阅读使用说明就可以轻松使用。由于我们的这次设计不会涉及数据库的知识,相对来说调用逻辑不会那么复杂,所以在此先对系统的功能模块予以给出以方便今后更详细的设计,如下表4-1:表4-1 功能概要功能模块功能描述 视频读入获取将要处理的视频文件播 放播放加载的视频文件并对目标进行标记暂 停暂停视频文件的播放与处理并显示车流量停 止停止视频文件的播放并返回到载入视频时的初始状态退 出退出运行,此时将弹出对话框进行确认4.4程序框架根据以上给出的功能模块,我们需要一些逻辑将其链接起来使得在程序设计时调用更加清晰,所以代码编写之前一定要把各个模块的调用关系或者说是程序的执行流程画出来。下面我们给出本系统的框架流程,如下图4-3: 图4-3 程序框架4.5小结在此部分我们主要给出了视频检测的四种方法并对其优缺点进行分析,最后确定了我们这次开发所需要采用的方法帧间差法。然后我们给出了功能概要和程序框架,所有这些都为下一步的详细设计打下基础。第五章 详细设计5.1前言详细设计是软件工程中软件开发的一个步骤,它是对概要设计的一个细化,也就是详细设计每个模块实现算法的过程。它的目标有两个:一是实现模块功能的算法在逻辑上要正确;二是算法描述要简明易懂。我们在概要设计中解决了软件系统总体结构设计的问题,包括整个软件系统的结构、模块划分和模块功能定义等,更重要的是确定了视频处理所采用的方法。详细设计则要解决如何实现各个模块的内部功能,即模块设计。具体的说,模块设计就是要为已经产生的各个子模块设计详细的算法。但这并不等同于系统实现阶段用具体的语言编码,它只是对实现细节作精确的描述,这样编码阶段就可以将详细设计中对功能实现的描述,直接翻译、转化为用某种程序设计语言书写的程序,下面将对此系统功能进行原理和算法描述。5.2功能模块与程序对应关系在系统编程前对各个模块进行功能划分是非常必要的,一方面可以降低开发的盲目感,另一方面也对系统维护也是非常重要的。各个类可以单独成包,这样修改时更有针对性。每个包的名字采用其功能的英文组合,根据其名就可以很直接的了解到它的作用,下面给出功能模块与程序类之间的对应关系,如表5-1:表5-1 功能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论