视频监控系统的设计和实现_第1页
视频监控系统的设计和实现_第2页
视频监控系统的设计和实现_第3页
视频监控系统的设计和实现_第4页
视频监控系统的设计和实现_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

视频监控系统设计和实现摘要视频监控系统是一门集计算机技术、通信技术和数字视频技术于一体综合系统,一直是大家关注应用技术热点之一。它以其直观方便、信息内容丰富而被广泛应用于很多场所,关键应用领域包含教育系统、电力系统、公检法系统、部队系统、银行系统、铁路系统、税务系统和医疗系统等,几乎每个行业全部有多个需求。其特点有:标准化、可扩展性、可用性和可靠性、易用性、开放式结构、完善性等。本文以试验室为背景,设计了一个试验室视频监控系统——当地监控系统,针对其视频采集、存放回放等功效要求,讨论软件系统关键任务及处理方案。视频采集部分使用OpenCV库函数实现,监控采集到视频图像经过预定义编码方法进行压缩,采取当今流行MPEG4文件格式,存放借助于人机交流界面录像功效实现,回放采取现有当地播放软件实现。系统软件实现基于MicrosoftVisualstudio环境,利用Qt开发。MicrosoftVisualstudio作为一个可视集成开发工具,提供了软件代码自动生成和可视化资源编辑功效,和传统部分编程平台相比,它能够使系统含有较高效率和可用性。本系统能够实现当地图像信息采集、录像、存放、回放等功效。初步试验结果表明,系统在关键功效上已靠近实用化,且操作简便、工作可靠,含有很好应用前景。关键词:视频监控,OpenCV,图像采集,存放

DesignandImplementationofvideomonitorsystemABSTRACTVideomonitorsystemissetofcomputertechnology,communicationtechnologyanddigitalvideotechnologyintheintegrationofIntegratedSystem.Ithasalwaysbeenoneofthehottestapplicationthatpeopleconcernedabout.Withitsintuitive,thesystemiswidelyusedinmanyoccasions.Themainapplicationfieldsincludeeducationsystem,powersystem,publicsecuritysystem,theunitsystem,thebankingsystem,therailwaysystem,thetaxsystemandthemedicalsystem,almosteveryindustryhastheneeds.Features:standardization,scalability,availabilityandreliability,easeofuse,openarchitecture,integrity,andsoon.Thissystemissetinlaboratoryanddesignedofalaboratoryvideomonitor–localmonitorsystem,foritsvideocaptureandstoreplaybackfunctionrequirements,discussingmajortasksandsolutionsofsoftwaresystem.VideocapturefunctionsachievedbyOpenCVlibrary,monitoringcollectionofvideoiscodedbycompressionofthefollowingpredefined,oneoftoday'spopularfileformatMPEG4,VideoStoreachievedbyman-machinecommunicationinterfaceimplementation,playbackusingpartachievedbylocalplayersoftware.SystemsoftwarebasedonMicrosoftVisualStudioenvironment,usingQtDevelopment.MicrosoftVisualStudioasavisualintegrateddevelopmenttoolprovidedresourcesofsoftwareAutomaticCodeGenerationandvisualeditingcapabilities.Comparedwiththetraditionalprogrammingplatform,itenablessystemwithhighefficiencyandavailability.Thesystemenableslocalimageinformationcollection,recording,storageandplaybackfunction.Preliminaryexperimentalresultsshowthatthesystemonmainfunctionisapproachingthepracticalandeasytooperate,reliableandgoodprospect.KEYWORDS:videomonitor,OpenCV,imagecapture,storage目录前言 1第1章 绪论 21.1视频监控系统现实状况 21.2视频监控系统发展方向 31.3技术背景 41.3.1VisualStudio介绍 41.3.2Qt介绍 51.3.3OpenCV介绍 61.3.4Xvid介绍 71.3.5流媒体技术 8第2章需求分析 92.1项目概述 92.1.1项目目标 92.1.2功效描述 92.1.3运行环境 102.2系统操作图 102.3运行需求 112.3.1硬件接口 112.3.2软件接口 11第3章概要设计 123.1功效划分及模块介绍 123.2视频采集模块实现方法 123.3编码压缩模块实现方法 143.4用户界面 18第4章具体设计 204.1程序描述 204.2程序实现 204.2.1取得摄像头驱动和版本号 214.2.2显示图像在用户端 214.2.3初始化压缩格式并开始压缩 224.2.4回调函数 234.2.5保留文件 24结论 25谢辞 26参考文件 27前言在社会信息化日益发展今天,计算机技术、网络技术、通信技术和多媒体技术己经渗透到人类生存活动各个领域中。伴随社会经济快速发展,社会公共安全也受到大家越来越多关注,安防产业作为一个新型产业发展很快速,也有好多IT企业转型到安防产业,使安防产业在技术上、可连续发展上有了坚实基础。视频监控系统应运而生。视频监控系统是安全防范系统关键组成部分,其信息流数字化、编码压缩、开放式协议,使智能网络视频监控系统和安防系统中各个子系统间实现无缝连接如:防盗报警系统、门禁系统。前端设备输出数字信号也可由多网合一方法,经过网络复用进行传输并在同一平台上进行管理和控制。多年来,伴随计算机网络和图像处理、传输技术飞速发展,视频监控制技术也有长足发展,而且也受到大家越来越多关注。它正从传统安防监控向管理、生产监控发展,并逐步和管理信息系统相结合,达成资源共享,为管理者提供更直观、更有效决议信息,视频监控不仅符合社会信息化发展趋势,而且代表了监控行业发展方向。视频监控系统通常过程是:在部分关键被监控场所安放一个或若干个摄像机拍摄监控现场,然后将视频信号经过传输网络(线缆、无线、光纤或以太网),传到指定视频监控中心,监控中心能够远程监控现场图像,并可经过存放介质保留现场视频数据供以后查询取证,同时还能够依据不一样需要和路径在现场安装其它探测装置,作为视频监控系统辅助设备。现在大家能够很轻易地实现视频信号传送和处理,得益于数字压缩技术日益成熟。没有经过压缩数字图象信号有二百多兆带宽,模拟信号数字化以后,再经过压缩,能够将其带宽压缩到几十、几百Kbps范围内。即使它们不能提供像电视那样高帧率视频图象,但在大家能够接收情况下,占用较小传输带宽,提供实时高质量图象,足以满足通常监控场所要求。绪论视频监控系统是安全防范技术体系中一个关键组成部分,它经过摄像机及其辅助设备将监视场所监控到图像、声音等信息传送到监控中心,实现对特定区域监控,含有强烈安全防范能力1.1视频监控系统现实状况在以前,关键是以模拟设备为主,含摄像机和磁带录像机全模拟电视监控系统,称为第一代模拟监控系统,这一阶段监控系统中基础不使用视频监控软件。以后到现在,伴随计算机处理能力提升和视频技术发展,大家利用计算机高速数据处理能力进行视频采集和压缩处理,利用显示器高分辨率实现图像多画面显示,大大提升了图像质量,因为传输依旧采取传统模拟视频电缆,所以就叫第二代半模拟半数字当地视频监控系统,这一阶段使用监控软件基础上全部是PC单机DVR软件。从开始,伴随网络带宽提升和成本降低、硬盘容量加大和中心存放成本降低,和多种实用视频处理技术出现,视频监控步入了全数字化网络时代,因为它从摄像机或网络视频服务器下来就直接进入网络,以数字视频压缩、传输、存放和播放为基础,依靠强大平台软件实施管理,所以称之为第三代全网络视频监控管理系统。在第三代视频监控系统中,视频监控软件是必不可缺,一般用户需要使用视频监控软件进行日常监控功效应用,系统管理员更需要使用视频监控软件对监控系统中全部硬件软件资源进行全方面管理和维护,能够毫不夸张说,视频监控软件是第三代视频监控系统关键。在中国外市场上,关键推出是数字控制模拟视频监控和数字视频监控两类产品。前者技术发展已经很成熟、性能稳定,并在实际工程应用中得到广泛应用,尤其是在大、中型视频监控工程中应用尤为广泛;后者是新近崛起以计算机技术及图像视频压缩为关键新型视频监控系统,该系统处理了模拟系统部分弊端而快速崛起,但仍需深入完善和发展。1.2视频监控系统发展方向前端一体化、视频数字化、监控网络化、系统集成化、管理智能化是视频监控系统公认发展方向,而数字化是网络化前提,网络化又是系统集成化基础,所以,视频监控发展最大特点就是数字化、网络化、智能化、系统化。1.数字化视频监控系统数字化是系统中信息流(包含视频、音频、控制等)从模拟状态转为数字状态,改变了“传统闭路电视系统是以摄像机成像技术为中心”结构,根本上改变视频监控系统从信息采集、数据处理、传输、系统控制等方法和结构形式。信息流数字化、编码压缩、开放式协议,使视频监控系统和安防系统中其它各子系统间实现无缝连接,并在统一操作平台上实现管理和控制,这也是系统集成化含义。2.网络化视频监控系统网络化将意味着系统结构将由集总式向集散式系统过渡,集散式系统采取多层分级结构形式,含有微内核技术实时多任务、多用户、分布式操作系统以实现抢先任务调度算法快速响应。组成集散式监控系统硬件和软件采取标准化、模块化和系列化设计,系统设备配置含有通用性强、开放性好、系统组态灵活、控制功效完善、数据处理方便、人机界面友好和系统安装、调试和维修简单化,系统运行互为热备份,容错可靠等功效。系统网络化在某种程度上打破了布控区域和设备扩展地域和数量界限。系统网络化将实现整个网络系统硬件和软件资源共享和任务和负载共享,这也是系统集成一个关键概念。3.智能化采取计算机为控制中心,经过系统软件实现控制界面可视化,控制环境多媒体化,能够方便地实现对视频切换、音频切换、镜头云台控制、报警输入、行动输出录像智能化控制,进而达成对事件分析、统计、处理,实现视频监控智能管理。4.系统化智能视频综合管理是用户真正需求,依据不一样行业、用户不一样,需求大致应包含视频监控、数据采集、办公信息、地理信息、告警联动、数据图像保留、网络安全、数据安全及授权认证等管理模块,集成了通信技术、计算机网络技术、图像处理技术、自动化技术、模拟安防技术和系统管理软件技术。1.3技术背景通常监控系统是由前端设备、传输设备、多路视频分配器、网络视频服务器、当地显示器、终端用户机等部分组成。前端包含:摄像机、镜头、云台、防护罩等设备。传输部分由视频线缆、电源线缆、控制线缆和传输线缆等组成。web嵌入式视频服务器连接多路视频输入,集监视、录像、多个画面分割、画面切换、回放检索、打印、等功效于一体。终端用户机实现远程视频回放和对云台监控。下面针对系统中用到关键技术做简明叙述。1.3.1VisualStudio介绍VisualStudio是微软企业推出开发环境。是现在最流行Windows平台应用程序开发环境。现在已经开发到9.0版本,也就是VisualStudio。它使开发人员能够快速创建高质量、用户体验丰富而又紧密联络应用程序,充足展示了Microsoft开发智能用户端应用程序构想。借助VisualStudio,采集和分析信息将变得更为简单便捷,业务决议也会所以变得更为有效。任何规模组织全部能够使用VisualStudio快速创建更安全、更易于管理而且更可靠应用程序。VisualStudio提供了高级开发工具、调试功效、数据库功效和创新功效,帮助在多种平台上快速创建目前最优异应用程序。VisualStudio包含多种增强功效,比如可视化设计器、对Web开发工具大量改善,和能够加速开发和处理全部类型数据语言增强功效。同时为开发人员提供了全部相关工具和框架支持。为了帮助开发人员快速创建优异软件,VisualStudio提供了改善语言和数据功效,比如语言集成查询(LINQ),各个编程人员能够利用这些功效更轻松地构建处理方案以分析和处理信息。1.3.2Qt介绍Qt是一个多平台C++图形用户界面应用程序框架,它提供给应用程序开发者建立艺术级图形用户界面所需所用功效。Qt是完全方面向对象很轻易扩展,而且许可真正地组件编程。Qt是挪威QtSoftware产品,6月17日被芬兰诺基亚企业收购。Qt4.6对全新平台提供支持,含有强大全新图形处理能力并支持多点触摸和手势输入,让高级应用程序和设备开发过程变得愈加轻松和愉快。自从1996年早些时候Qt进入商业领域,它已经成为全世界范围内数千种成功应用程序基础。含有以下优点:1.优良跨平台特征Qt支持下列操作系统:MicrosoftWindows95/98,MicrosoftWindowsNT,linux,Solaris,SunOS,HP-UX等等。2.面向对象Qt良好封装机制使得Qt模块化程度很高,可重用性很好,对于用户开发来说是很方便,Qt提供了一个称为signals/slots安全类型来替换callback,这使得各个元件之间协同工作变得十分简单。3.丰富APIQt包含多达250个以上C++类,还替供基于模板collections,serialization,file,I/Odevice,directorymanagement,date/time类甚至还包含正则表示式处理功效。5.大量开发文档6.XML支持1.3.3OpenCV介绍OpenCV是Intel资助开源计算机视觉库。它由一系列C函数和少许C++类组成,实现了图像处理和计算机视觉方面很多通用算法。OpenCV拥有包含300多个C/C++函数跨平台中、高层API,它不依靠和其它外部库,尽管也能够使用一些外部库。OpenCV对非商业应用和商业应用全部是无偿。现在OpenCV库包含以下多个模块:1.CxCore:包含部分基础功效。从“core关键"名字能够看出,该库提供了全部OpenCV运行时部分最基础数据结构,包含矩阵,数组基础运算,包含犯错处理部分基础函数。具体分为下面若干部分:(1)基础结构(2)数组操作(3)动态结构(4)绘图函数(5)数据保留和运行时类型信息(6)其它混合函数(7)错误处理和系统函数2.Cv:图像处理和计算机视觉功效,这是关键函数库,包含图像处理、结构分析、运动分析、物体跟踪、模式识别和摄像机标定等功效。3.CvAux:附加库函数,包含部分试验性函数。4.HighGUI:交互部分,HighHGUI只是用来建立快速软件原形或是试验用。它设计意图是为用户提供简单易用图形用户接口。通常,你需要读入源图像到你程序或输出结果图像到磁盘。另外,需要简单方法显示图像到监视器而且向许可(受限)用户提供输入。OpenCV功效关键包含以下:1.图像数据操作包含分配、释放、复制、设置和转换。2.图像和视频输入输出I/O文包含件和摄像头输入、图像和视频文件输出。3.矩阵和微量操作和线性代数算法程序包含矩阵积、解议程、特征值和奇异值等。4.各个动态数据结构包含列表、队列、集合、树、图等。5.数字图像处理包含滤波、边缘检测、角点检测、采样和差值、色彩转换、形态操作、直方图、图像金字塔等。6.结构分析包含连接部件、轮廓处理、距离变换、各自距计算、模板匹配、Hough变换、多边形迫近、直线拟合、椭圆拟合等。7.摄像头定标包含发觉和跟踪定标模式、定标、矩阵估量、齐次矩阵估量、立体对应。8.运动分析包含光流、运动分割、跟踪。9.目标识别如特征法、隐马尔可夫模式。10.GUI实现图像和视频显示、键盘和鼠标事件处理、滚动条等和图像标注如线、二次曲线、多边形、文字。1.3.4Xvid介绍Xvid(旧称为XviD)是一个开放原始码MPEG-4视频编解码器,它是基于OpenDivX而编写,性能得到极大提升,被认为是现在世界上速度最快mpeg4codec。Xvid特点:1.多个编码模式2.单重固定码流压缩3.单重质量模式动态码流压缩4.单重量化模式动态码流压缩5.双重动态码流压缩模式,使视频在占用空间及画面质量之间取得最好平衡6.量化方法和范围控制7.运动侦测和曲线平衡分配8.多级运动侦测精度,半像素插值9.动态关键帧距10.心理视觉亮度修正xvid有两种编码方法:singlepass和twopass分别实现mpeg4标准中simpleprofile和advancedsimpleprofile两种模式要求。1.3.5流媒体技术伴随互联网普及,利用网络传输声音和视频信号需求也越来越大。广播电视等媒体上网后,也全部期望经过互联网来公布自己音视频节目。不过,音视频在存贮时文件体积通常全部十分庞大。在网络带宽还很有限情况下,花几十分钟甚至更长时间等候一个音视频文件传输,不能不说是一件让人头疼事。流媒体技术出现,在一定程度上使互联网传输音视频难局面得到改善。传统网络传输音视频等多媒体信息方法是完全下载后再播放,下载常常要花数分钟甚至数小时。而采取流媒体技术,就可实现流式传输,将声音、影像或动画由服务器向用户计算机进行连续、不间断传送,用户无须等到整个文件全部下载完成,而只需经过几秒或十几秒开启延时即可进行观看。当声音视频等在用户机器上播放时,文件剩下部分还会从服务器上继续下载。流式传输技术又分两种,一个是次序流式传输,另一个是实时流式传输。次序流式传输是次序下载,在下载文件同时用户能够观看,不过,用户观看和服务器上传输并不是同时进行,用户是在一段延时后才能看到服务器上传出来信息,或说用户看到总是服务器在若干时间以前传出来信息。在这过程中,用户只能观看已下载那部分,而不能要求跳到还未下载部分。次序流式传输比较适合高质量短片段,因为它能够很好地确保节目播放最终质量。因为它能够很好地确保节目播放最终质量。它适合于在网站上公布供用户点播音视频节目。在实时流式传输中,音视频信息可被实时观看到。在观看过程中用户可快进或后退以观看前面或后面内容,不过在这种传输方法中,假如网络传输情况不理想,则收到信号效果比较差。在利用流媒体技术时,音视频文件要采取对应格式,不一样格式文件需要用不一样播放器软件来播放,所谓“一把钥匙开一把锁”。第2章需求分析视频监控系统是安防和信息技术相结合高科技产物,在安全防范,案件侦破,校园监考,赛事督管方面作用突出。科技发展方向和水平是带动整个市场需求和建设进程原动力,进而为社会平安,友好提供强有力保障。2.1项目概述本视频监控系统是用户端软件部分,是整个网络视频监控系统一部分,在VisualStudio和Qt环境下编译,运行,经过OpenCV库函数实现视频采集,显示,拍照功效,采取Xvid技术实现视频压缩存放。在Windows平台下,用户可经过主界面菜单来实施操作,实现静态画面捕捉、视频采集、存放和回放等功效。此部分也是最关键,因为只有有效控制采集跟压缩,得到信息才会有价值,传输起来方便,快捷。2.1.1项目目标计算机操作系统,优异开发平台上,利用现有软件,配置一定硬件,开发一个含有开放体系结构、易扩充、易维护、含有良好人机交互界面视频监控系统,实现视频静态画面捕捉,视频录制等功效。2.1.2功效描述本系统从摄像头实时采集视频并显示,相片拍照,预览和管理。可将采集到视频文件压缩成MPEG4格式文件保留,并可播放保留MPEG4文件。用户在主界面可直接看到采集窗口,显示目前捕捉到画面,更有快捷按钮实现相片拍照,和视频录制开始和结束,也可自行设置相片存放路径,大小,质量等,录制结束后视频文件自动编码压缩存放在指定位置,在文件操作菜单中能够打开并预览照片和视频,在主界面下方显示拍摄相片,也可方便预览,同时删除变可视化,更人性化设计了退出系统操作菜单,避免因操作不妥引发瓦解。2.1.3运行环境首先硬环境方面计算机配置主流全部能够满足需求,外置摄像头也很关键,性能要好,那样画面会更清楚。软环境方面本系统是在VisualStudio和Qt环境下编译运行。2.2系统操作图进入系统进入系统是否进入系统主界面是否开始视频录制拍照参数设置视频回放图2-1系统操作图是否进入系统是本系统运行首要条件,进入后出现系统主界面,这里用户可方便实现全部操作,包含静态画面捕捉、视频采集、存放和回放等功效。2.3运行需求运行需求包含硬件接口和软件接口。2.3.1硬件接口摄像头:中星微ZC030XUSB摄像头,CMOSOV511。嵌入式平台:S3C2440ARM9开发板。2.3.2软件接口在Windows系统下使用了OpenCV部分库函数(cvCreateFileCapture,cvCreateCameraCapture,cvGrabFrame,cvQueryFrame)和封装类(VideoCaptureDevice,V4L1VideoCaptureDevice,CvVideoCaptureDevic)功效实现摄像头控制,使用XviD库函数(xvid_global(),xvid_decore()和xvid_encore())进行MPEG4视频解压缩:xvid_global()实现全局初始化,获取XviD和硬件功效信息(全局信息),色场空间装换功效;xvid_decore()为Xvid解码关键函数,xvid_encore()是对输入原始图像进行编码,输出符合MPEG4标准要求码流。第3章概要设计本章节是在系统需求分析基础上,对视频监控系统做概要设计。关键处理了实现该系统需求程序模块设计问题。包含怎样把该系统划分成若干个模块、决定各个模块之间接口、模块之间传输信息。3.1功效划分及模块介绍1模块名称:视频采集模块模块功效:从摄像头实时采集画面及视频录制模块实现:借助OpenCV库函数(cvCreateFileCapture,cvCreateCameraCapture等)实现2模块名称:编码压缩模块模块功效:视频压缩存放模块实现:借助XviD三个关键接口函数(xvid_global(),xvid_decore()和xvid_encore())实现3.2视频采集模块实现方法本系统支持多平台多操作系统,对多个摄像头采集方法支持,使用工厂模式进行封装,提供了统一摄像头视频采集接口。如有新采集方法,只需修改文件videocapturedevicefactory.cpp内容即可。先将系统类层次结构列出,下面将具体简绍实现各个模块功效第三方类库。VideoCaptureDeviceVideoCaptureDeviceCvVideoCaptureDeviceV4L1VideoCaptureDeviceQWidgetVideoCaptureViewQMainWindowVMSMainWindowVideoCaptureDeviceFactoryCameraSettingsQDialogQToolButtonThumbButtonXvidVideoCaptureDeviceXvidEncode图3-1类层次结构视频采集模块功效关键经过OpenCV第三方库函数实现,1.初始化从文件中获取视频,函数原型为:CvCapture*cvCreateFileCapture(constchar*filename);filename视频文件名。函数cvCreateFileCapture给指定文件中视频流分配和初始化CvCapture结构。2.初始化从摄像头中获取视频,函数原型为:CvCapture*cvCreateCameraCapture(intindex);index要使用摄像头索引。假如只有一个摄像头或用哪个摄像头也无所谓,那使用参数-1应该便能够。函数cvCreateCameraCapture给从摄像头视频流分配和初始化CvCapture结构。现在在Windows下可使用两种接口:VideoforWindows(VFW)和MatroxImagingLibrary(MIL);Linux下也有两种接口:V4L和FireWire。3.释放以上两个结构,使用函数cvReleaseCapture,原型为:voidcvReleaseCapture(CvCapture**capture);capture视频获取结构指针。函数cvReleaseCapture释放由函数cvCreateFileCapture或cvCreateCameraCapture分配CvCapture结构。4.从摄像头或视频文件中抓取帧,函数原型为:intcvGrabFrame(CvCapture*capture);capture视频获取结构。函数cvGrabFrame从摄像头或文件中抓取帧。被抓取帧在内部被存放。这个函数目标是快速抓取帧,这一点对同时从多个摄像头读取数据同时是很关键。5.取回由函数cvGrabFrame抓取图像,函数原型为:IplImage*cvRetrieveFrame(CvCapture*capture);capture视频获取结构。函数cvRetrieveFrame返回由函数cvGrabFrame抓取图像指针。返回图像不能够被用户释放或修改。6.从摄像头抓取并返回一帧函数原型为:IplImage*cvQueryFrame(CvCapture*capture);capture视频获取结构。函数cvQueryFrame从摄像头中抓取一帧,然后解压并返回这一帧。这个函数仅仅是函数cvGrabFrame和函数cvRetrieveFrame在一起调用组合。返回图像不能够被用户释放或修改。抓取后,capture被指向下一帧,可用cvSetCaptureProperty调整capture到适宜帧。3.3编码压缩模块实现方法编码压缩模块经过预定义Xvid编码方法进行压缩,采取当今流行MPEG4文件格式存放。之所以采取MPEG4文件格式是因为MPEG4在1995年7月开始研究,1998年11月被ISO/IEC同意为正式标准,它不仅针对一定比特率下视频编码,愈加重视系统交互性和灵活性。MPEG4尤其针对低带宽等条件设计算法,节省存放空间,而且图像质量好。对于MPEG4视频编码关键来说,XviD多种算法设计全部有代表性优异意义。1.多个编码模式:除了最原始单重估定码流压缩(1-passCBR)之外,XviD提供了包含:单重质量模式动态码流压缩、单重量化(Quantization)模式动态码流压缩、和包含外部控制和内部控制两种双重(2-pass)动态码流压缩模式。2.量化(Quantization)方法和范围控制量化(Quantization),简单说就是在编码时经过对时间或空间上相邻画面单元进行同化、模糊细节程度,是对画面质量最基础控制原因。除了量化方法选择,XviD还提供了强大对压缩过程中量化幅度范围控制。用户能够选定压缩时许可使用量化幅度范围。3.心理视觉亮度修正除了基础MPEG4编码外,XviD还提供了不少附加功效。其中经典就是心理视觉亮度修正。这个功效可能经过去除肉眼不能分辨亮度信号和亮度差异,来提升压缩效率。4.画面优化译码不仅在编码上XivD拥有强大功效,在译码时画面优化方面,XviD也有很多新建树。比如"Horizontaldeblock(Y)"能够柔化水平方向亮度马赛克;"Horizontaldeblock(C)"能够柔化水平相色度马赛克;"Deringing(Y)"能够柔化环状亮度色斑;"Deinging(C)"能够柔化环状色度色斑;"mosquito"能够降低画面中蚊状噪斑。相信很快未来,XviD就能够把MPEG4编码优势发挥到极致,成为网上视频统计格式盟主。XvidAPI接口定义很清楚,本模块经过其三个关键接口函数(xvid_global(),xvid_decore()和xvid_encore())实现上述功效。xvid_global()函数原型:intxvid_global(void*handle,intopt,void*param1,void*param2)功效:1.全局初始化2.获取XviD和硬件功效信息(全局信息)3.色场空间装换参数1.handle,是一个句柄,代表着一个XviDglobal操作实例2.opt,指定要实施操作,对应上面三种功效,opt分别可取XVID_GBL_INIT、XVID_GBL_INFO、XVID_GBL_CONVERT这么三个值3.param1,是对应操作入口参数或出口参数。当opt为XVID_GBL_INIT时,param1是入口参数,应该为一个xvid_gbl_init_t类型指针;当opt为XVID_GBL_INFO时,param1是出口参数,应该为一个xvid_gbl_info_t类型指针;当opt为XVID_GBL_CONVERT时,param1是入口参数,应该为一个xvid_gbl_convert_t类型指针;4.param2,这个参数将被忽略,通常应该设置为NULL.返回值:成功:返回0失败:返回对应错误码(<0)xvid_decore()此为Xvid解码关键函数,其函数原型为:Intxvid_decore(void*handle,intopt,void*param1,void*param2);参数1.handle,是一个句柄,用来代表一个Xvid解码操作实例;2.opt,指定xvid_decore()函数要实施操作。Opt可取以下值之一;XVID_DEC_CREATE、XVID_DEC_DESTROY、XVID_DEC_DECORE。和xvid_global()函数不一样,在实施解码操作时,必需先创建一个Xvid解码实例(XVID_DEC_CREATE),然后进入解码循环(XVID_DEC_DECODE),在解码循环完成以后应该销毁一开始创建Xvid解码实例(XVID_DEC_DESTORY)。3.param1,是一个通用指针类型,具体应该指向什么依据opt参数取值而定,比如,当opt取值为XVID_DECCREATE是,param1应该指向一个xvid_dec_create_t类型结构体。对于opt为XVID_DEC_CREATE和XVID_DEC_DECODE情形。param1

全部是必需参数。对于opt为XVID_DEC_DESTORY情况,param1参数将被忽略,通常设置为NULL即可。4.param2,是一个可选参数,只在opt为XVID_DEC_DECODE时候有效,指向一个xvid_dec_stats_t类型结构体。xvid_encore()函数xvid_encore()是对输入原始图像进行编码,输出符合MPEG4标准要求码流。和xvid_decore()函数工作步骤一样:xvid_encore()函数使用方法也是先创建一个Xvid编码实例;然后实施实际编码操作;最终,在全部解码过程全部结束以后,销毁所创建Xvid实例。不过,和xvid_decore()相比,xvid_encore()函数使用要复杂部分,关键原因是编码过程参数设置要麻烦部分,xvid_encore()函数原型定义以下:intxvid_encore(void*handle,intopt,void*param1,void*paeam2);参数1.handle,编码实例句柄,用来代表一个xvid编码实例;2.opt,指定xvid_encore()函数要实施操作。Opt可取以下值之一;XVID_ENC_CREATE、XVID_ENC_DESTORY、XVID_ENC_ENCORE。在实施编码操作时,必需先创建一个XviD编码实例(XVID_ENC_CREATE),然后进入编码循环(XVID_ENC_ENCORE),在编码循环完成以后应该销毁所创建XviD编码实例(XVID_ENC_DESTORY)。3.param1,是一个通用指针类型,具体应该指向什么依据opt参数取值而定。当opt值为XVID_ENC_CREATE时,param1应该指向一个xvid_enc_create_t类型结构体。对于opt为XVID_ENC_CREATE和XVID_ENC_ENODE情形,param1全部是必需参数。对于opt为XVID_ENC_DESTORY情况,param1应该为NULL.4.Param2,是一个可选参数,只在opt为XVID_ENC_ENCODE时候有效,指向一个xvid_dec_stats_t类型结构体。返回值:成功:对于opt为XVID_ENC_CREATE和XVID_ENC_DESTORY情形,xvid_encore()函数返回0表示成功,对于opt为XVID_ENC_ENCODE情形,xvid_encore()函数返回输出字节数表示实施成功;失败:对于opt为XVID_ENC_CREATE和XVID_ENC_DESTORY情形,xvid_encore()函数返回小于0错误码表示实施失败,对于opt为XVID_ENC_ENCODE情形,xvid_encore()函数返回0表示该帧不应该被写入。3.4用户界面图3-1程序主界面实现系统全部功效包含视频录制,拍照,照片参数设置,和视频回放主菜单操作说明:文件打开:打开已录制MPEG4视频文件并播放设置选择:参数设置图像采集拍照:拍照图像采集删除:删除所选中图片视频录制开始:开始录制MPEG4视频视频录制结束:停止录制MPEG4视频图3-2设置对话框可由用户自行设置存放路径,相片大小及质量操作菜单说明:存放路径:相册存放路径尺寸:相片拍照大小质量:相片质量(JPEG格式)第4章具体设计本章节任务是在概要设计基础上设计模块程序步骤、算法和数据结构,和具体实现过程。4.1程序描述整个系统用户界面是在Qt环境下设计实现,外部经过摄像头采集信息,内部经过部分对象模型实现通信和事件触发功效,这部分功效实现依靠于Qt部分特征,包含:1.一个相关无缝对象通讯被称为信号和槽很强大机制2.可查询和可设计属性3.强大事件和事件过滤器4.依据上下文进行国际化字符串翻译其中最关键是信号和槽机制,信号和槽用于对象间通讯。信号/槽机制是Qt一个中心特征而且是Qt和其它工具包最不相同部分。在图形用户界面编程中,我们常常期望一个窗口部件一个改变被通知给另一个窗口部件。更通常地,我们期望任何一类对象能够和其它对象进行通讯。比如,假如我们正在解析一个XML文件,当我们碰到一个新标签时,我们可能期望通知列表视图我们正在用来表示XML文件结构。此时我们使用信号和槽。当一个特定事件发生时候,一个信号被发射。Qt窗口部件有很多预定义信号,不过我们总是能够经过继承来加入我们自己信号。槽就是一个能够被调用处理特定信号函数。Qt窗口部件又很多预定义槽,不过通常习惯是你能够加入自己槽,这么你就能够处理你所感爱好信号。4.2程序实现这部分关键描述了系统部分功效具体实现方法。4.2.1取得摄像头驱动和版本号取得视频获取结构属性,函数原型为:doublecvGetCaptureProperty(CvCapture*capture,intproperty_id);capture视频获取结构。property_id属性标识。能够是下面之一:CV_CAP_PROP_POS_MSEC-影片现在位置,为毫秒数或视频获取时间戳CV_CAP_PROP_POS_FRAMES-将被下一步解压/获取帧索引,以0为起点CV_CAP_PROP_POS_AVI_RATIO-视频文件相对位置(0-影片开始,1-影片结尾)CV_CAP_PROP_FRAME_WIDTH-视频流中帧宽度CV_CAP_PROP_FRAME_HEIGHT-视频流中帧高度CV_CAP_PROP_FPS-帧率CV_CAP_PROP_FOURCC-表示codec四个字符CV_CAP_PROP_FRAME_COUNT-视频文件中帧总数函数cvGetCaptureProperty取得摄像头指定属性,或视频文件指定属性。4.2.2显示图像在用户端1.图像载入函数函数cvLoadImage载入指定图像文件,并返回指向该文件IplImage指针。函数支持bmp、jpg、png、tiff等格式图像。其函数原型以下:IplImage*cvLoadImage(constchar*filename,intiscolor);其中,filename是待载入图像名称,包含图像扩展名;iscolor是一个辅助参数项,可选正数、零和负数三种值,正数表示作为三通道图像载入,零表示该图像作为单通道图像,负数表示载入图像通道数由图像文件本身决定。2.图像显示函数函数cvShowImage是在指定窗口中显示图像,其函数原型以下:voidcvShowImage(constchar*name,constCvArr*image);其中,name是窗口名称,image是图像类型指针,通常是IplImage指针。4.2.3初始化压缩格式并开始压缩先创建一个Xvid编码实例,即初始化压缩格式,然后实施实际编码操作;创建解码实例时,应该将xvid_encore()函数param1参数设为一个xvid_enc_create_t类型结构体地址。实例定义以下:xvid_enc_create_txvid_enc_create;intxerr;memset(&xvid_enc_create,0,sizeof(xvid_enc_create));xvid_enc_create.version=XVID_VERSION;xvid_enc_create.width=width;xvid_enc_create.height=height;xvid_enc_file=XVID_PROFILE_AS_L4;xvid_enc_create.fincr=1;xvid_enc_create.fbase=10;xerr=xvid_encore(0,XVID_ENC_CREATE,&xvid_enc_create,0);enc_handle=xvid_enc_create.handle;returnxerr;在创建了XviD解码实例以后,紧接着事情就是进行真正编码工作了,这也经过前面简绍xvid_encore()函数完成了。为了完成编码过程,xvid_encore()函数param1参数应该设定为一个指向xvid_enc_frame_t类型结构体,可选参数param2能够指向一个xvid_enc_stats_t类型结构体。xvid_encore()函数第一个参数handle通常应该设置为创建XviD编码实例以后得到句柄,而opt参数应该指定为XVID_ENC_ENCODE()。xvid_enc_frame_txvid_enc_frame;xvid_enc_stats_txvid_enc_stats;memset(&xvid_enc_frame,0,sizeof(xvid_enc_frame));xvid_enc_frame.version=XVID_VERSION;memset(&xvid_enc_stats,0,sizeof(xvid_enc_stats));xvid_enc_stats.version=XVID_VERSION;xvid_enc_frame.bitstream=bitstream;xvid_enc_frame.length=-1;xvid_enc_frame.input.plane[0]=image;xvid_enc_frame.input.csp=XVID_CSP_BGRA;xvid_enc_frame.input.stride[0]=width*4;xvid_enc_frame.input.csp=0;xvid_enc_frame.vol_flags=0;xvid_enc_frame.vop_flags=0;xvid_enc_frame.type=XVID_TYPE_AUTO;xvid_enc_frame.quant=0;xvid_enc_frame.motion=0;xvid_encore(enc_handle,XVID_ENC_ENCODE,&xvid_enc_frame,&xvid_enc_stats);在上述代码中,image中保留是输入图像,bitstream用于保留编码后码流,大部分xvid_enc_frame中组员全部采取默认设置,实际上设置工作集中在设定输入图像和输出流上。设置好xvid_enc_frame以后,调用xvid_encore()函数,其中第一个参数enc_handle是创建XviD编码实例后返回实例句柄,编码状态经过xvid_enc_stats返回。4.2.4回调函数所谓回调函数就是根据一定形式由你定义并编写实现内容,当发生某种事件时,而由系统或其它函数来调用函数。使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己编写一个函数(也就是回调函数)地址作为参数传输给那个函数。而那个函数在需要时候,也就是某种事情发生时候,利用传输函数地址调用回调函数,这时你能够利用这个机会在回调函数中处理消息或完成一定操作。回调函数只能是全局函数,或是静态函数,因为这个函数只是在这个类中使用,所以为了维护类完整性,我们用类静态组员函数来做回调函数。回调函数是一个经过函数指针调用函数。假如把函数指针(地址)作为参数传输给另一个函数,当这个指针被用为调用它所指向函数时,我们就说这是回调函数。回调函数能够把调用者和被调用者分开,调用者不关心谁是被调用者,全部它需知道,只是存在一个含有某种特定原型、一些限制条件(如

温馨提示

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

评论

0/150

提交评论