《视频监控系统的设计与实现--电气论文.doc》由会员分享,可在线阅读,更多相关《视频监控系统的设计与实现--电气论文.doc(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、洛阳理工学院毕业设计(论文)视频监控系统的设计与实现摘 要视频监控系统是一门集计算机技术、通信技术和数字视频技术于一体的综合系统,一直是人们关注的应用技术热点之一。它以其直观方便、信息内容丰富而被广泛应用于许多场合,主要应用领域包括教育系统、电力系统、公检法系统、部队系统、银行系统、铁路系统、税务系统以及医疗系统等,几乎每个行业都有多种需求。其特点有:标准化、可扩展性、可用性和可靠性、易用性、开放式结构、完善性等。 本文以实验室为背景,设计了一个实验室视频监控系统本地监控系统,针对其视频采集、存储回放等功能的要求,讨论软件系统的主要任务及解决方案。视频采集部分使用OpenCV库函数实现,监控采
2、集到的视频图像经过预定义的编码方式进行压缩,采用当今流行的MPEG4文件格式,存储借助于人机交流界面的录像功能实现,回放采用现有的本地播放软件实现。系统软件实现基于Microsoft Visual studio 2008环境,利用Qt开发。Microsoft Visual studio 2008作为一个可视的集成开发工具,提供了软件代码自动生成和可视化的资源编辑功能,与传统的一些编程平台相比,它能够使系统具有较高的效率和可用性。本系统可以实现本地图像信息采集、录像、存储、回放等功能。初步的实验结果表明,系统在主要功能上已接近实用化,且操作简便、工作可靠,具有很好的应用前景。关键词:视频监控,O
3、penCV,图像采集,存储 Design and Implementation of video monitor systemABSTRACTVideo monitor system is set of computer technology,communication technology and digital video technology in the integration of Integrated System.It has always been one of the hottest application that people concerned about. With
4、its intuitive,the system is widely used in many occasions.The main application fields include education system, power system, public security system, the unit system, the banking system, the railway system,the tax system and the medical system,almost every industry has the needs.Features : standardi
5、zation,scalability,availability and reliability, ease of use, open architecture, integrity, and so on.This system is set in laboratory and designed of a laboratory video monitor local monitor system, for its video capture and store playback function requirements, discussing major tasks and solutions
6、 of software system. Video capture functions achieved by OpenCV library ,monitoring collection of video is coded by compression of the following predefined, one of todays popular file format MPEG4 ,Video Store achieved by man - machine communication interface implementation ,playbackusing part achie
7、ved by local player software.System software based on Microsoft Visual Studio 2008 environment, using Qt Development. Microsoft Visual Studio 2008 as a visual integrated development tool provided resources of software Automatic Code Generation and visual editing capabilities. Compared with the tradi
8、tional programming platform, it enables system with high efficiency and availability.The system enables local image information collection, recording, storage and playbackfunction.Preliminary experimental results show that the system on main function is approaching the practical and easy to operate,
9、 reliable and good prospect.KEY WORDS: video monitor,OpenCV,image capture,storage目录前言1第1章绪论21.1 视频监控系统的现状21.2 视频监控系统的发展方向31.3 技术背景41.3.1 Visual Studio2008简介41.3.2 Qt介绍51.3.3 OpenCV简介61.3.4 Xvid简介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 软件
10、接口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参考文献278前言在社会信息化日益发展的今天,计算机技术、网络技术、通信技术以及多媒体技术己经渗透到人类生存活动的各个领域中。随着社会经济的快速发展,社会公共安全也受到人们越来越多的关注,安防产业作为一个新型的产业发展
11、非常迅速,也有好多IT公司转型到安防产业,使安防产业在技术上、可持续发展上有了坚实的基础。视频监控系统应运而生。 视频监控系统是安全防范系统的重要组成部分,其信息流的数字化、编码压缩、开放式的协议,使智能网络视频监控系统与安防系统中的各个子系统间实现无缝连接如:防盗报警系统、门禁系统 。前端设备输出的数字信号也可由多网合一的方式,通过网络复用进行传输并在同一平台上进行管理与控制。近年来,随着计算机网络以及图像处理、传输技术的飞速发展,视频监控制技术也有长足的发展,而且也受到人们越来越多关注。它正从传统的安防监控向管理、生产监控发展,并逐步与管理信息系统相结合,达到资源共享,为管理者提供更直观、
12、更有效的决策信息,视频监控不仅符合社会信息化的发展趋势,而且代表了监控行业的发展方向。视频监控系统的一般过程是:在一些重要的被监控场所安放一个或若干个摄像机拍摄监控现场,然后将视频信号通过传输网络(线缆、无线、光纤或以太网),传到指定的视频监控中心,监控中心可以远程监控现场图像,并可通过存储介质保存现场视频数据供日后查询取证,同时还可以根据不同需要和途径在现场安装其它的探测装置,作为视频监控系统的辅助设备。现在人们能够很容易地实现视频信号的传送和处理,得益于数字压缩技术的日益成熟。没有经过压缩的数字图象信号有二百多兆的带宽,模拟信号数字化以后,再经过压缩,可以将其带宽压缩到几十、几百Kbps的
13、范围内。虽然它们不能提供像电视那样的高帧率视频图象,但在人们可以接受的情况下,占用较小的传输带宽,提供实时的高质量图象,足以满足一般监控场合的要求。第1章 绪论视频监控系统是安全防范技术体系中的一个重要组成部分,它通过摄像机及其辅助设备将监视场所监控到的图像、声音等信息传送到监控中心,实现对特定区域的监控,具有强烈的安全防范能力1.1视频监控系统的现状在2000年以前,主要是以模拟设备为主,含摄像机和磁带录像机的全模拟电视监控系统,称为第一代模拟监控系统,这一阶段监控系统中基本不使用视频监控软件。 2000年以后到现在,随着计算机处理能力的提高和视频技术的发展,人们利用计算机的高速数据处理能力
14、进行视频的采集和压缩处理,利用显示器的高分辨率实现图像的多画面显示,大大提高了图像质量,由于传输依旧采用传统的模拟视频电缆,所以就叫第二代半模拟半数字本地视频监控系统,这一阶段使用的监控软件基本上都是PC单机DVR软件。从2004年开始,随着网络带宽的提高和成本的降低、硬盘容量的加大和中心存储成本的降低,以及各种实用视频处理技术的出现,视频监控步入了全数字化的网络时代,由于它从摄像机或网络视频服务器下来就直接进入网络,以数字视频的压缩、传输、存储和播放为基础,依靠强大的平台软件实施管理,所以称之为第三代全网络视频监控管理系统。在第三代视频监控系统中,视频监控软件是必不可缺的,普通用户需要使用视
15、频监控软件进行日常的监控功能应用,系统管理员更需要使用视频监控软件对监控系统中所有的硬件软件资源进行全面的管理和维护,可以毫不夸张的说,视频监控软件是第三代视频监控系统的核心。在国内外市场上,主要推出的是数字控制的模拟视频监控和数字视频监控两类产品。前者技术发展已经非常成熟、性能稳定,并在实际工程应用中得到广泛应用,特别是在大、中型视频监控工程中的应用尤为广泛;后者是新近崛起的以计算机技术及图像视频压缩为核心的新型视频监控系统,该系统解决了模拟系统部分弊端而迅速崛起,但仍需进一步完善和发展。1.2视频监控系统的发展方向前端一体化、视频数字化、监控网络化、系统集成化、管理智能化是视频监控系统公认
16、的发展方向,而数字化是网络化的前提,网络化又是系统集成化的基础,所以,视频监控发展的最大特点就是数字化、网络化、智能化、系统化。1.数字化视频监控系统的数字化是系统中信息流(包括视频、音频、控制等)从模拟状态转为数字状态,改变了“传统闭路电视系统是以摄像机成像技术为中心”的结构,根本上改变视频监控系统从信息采集、数据处理、传输、系统控制等的方式和结构形式。信息流的数字化 、编码压缩、开放式的协议,使视频监控系统与安防系统中其它各子系统间实现无缝连接,并在统一的操作平台上实现管理和控制,这也是系统集成化的含义。2. 网络化 视频监控系统的网络化将意味着系统的结构将由集总式向集散式系统过渡,集散式
17、系统采用多层分级的结构形式,具有微内核技术的实时多任务、多用户、分布式操作系统以实现抢先任务调度算法的快速响应。组成集散式监控系统的硬件和软件采用标准化、模块化和系列化的设计,系统设备的配置具有通用性强、开放性好、系统组态灵活、控制功能完善、数据处理方便、人机界面友好以及系统安装、调试和维修简单化,系统运行互为热备份,容错可靠等功能。系统的网络化在某种程度上打破了布控区域和设备扩展的地域和数量界限。系统网络化将实现整个网络系统硬件和软件资源的共享以及任务和负载的共享,这也是系统集成的一个重要概念。3. 智能化采用计算机为控制中心,通过系统软件实现控制界面的可视化,控制环境的多媒体化,可以方便地
18、实现对视频切换、音频切换、镜头云台控制、报警输入、行动输出录像的智能化控制,进而达到对事件的分析、统计、处理,实现视频监控的智能管理。4. 系统化智能视频综合管理是客户的真正需求,根据不同行业、客户的不同,需求大致应包含视频监控、数据采集、办公信息、地理信息、告警联动、数据图像保存、网络安全、数据安全及授权认证等管理模块,集成了通信技术、计算机网络技术、图像处理技术、自动化技术、模拟安防技术和系统管理软件技术。1.3技术背景一般监控系统是由前端设备、传输设备、多路视频分配器、网络视频服务器、本地显示器、终端客户机等部分组成。前端包括:摄像机、镜头、云台、防护罩等设备。传输部分由视频线缆、电源线
19、缆、控制线缆和传输线缆等组成。web嵌入式视频服务器连接多路视频输入,集监视、录像、多种画面分割、画面切换、回放检索、打印、等功能于一体。终端客户机实现远程视频回放和对云台的监控。下面针对系统中用到的主要技术做简要叙述。1.3.1 Visual Studio2008简介Visual Studio 是微软公司推出的开发环境。是目前最流行的 Windows 平台应用程序开发环境。目前已经开发到 9.0 版本,也就是 Visual Studio 2008。它使开发人员能够快速创建高质量、用户体验丰富而又紧密联系的应用程序,充分展示了 Microsoft 开发智能客户端应用程序的构想。借助 Visua
20、l Studio 2008,采集和分析信息将变得更为简单便捷,业务决策也会因此变得更为有效。任何规模的组织都可以使用 Visual Studio 2008 快速创建更安全、更易于管理并且更可靠的应用程序。Visual Studio 2008 提供了高级开发工具、调试功能、数据库功能和创新功能,帮助在各种平台上快速创建当前最先进的应用程序。Visual Studio 2008 包括各种增强功能,例如可视化设计器、对 Web 开发工具的大量改进,以及能够加速开发和处理所有类型数据的语言增强功能。同时为开发人员提供了所有相关的工具和框架支持。为了帮助开发人员迅速创建先进的软件,Visual Stud
21、io 2008 提供了改进的语言和数据功能,例如语言集成的查询 (LINQ),各个编程人员可以利用这些功能更轻松地构建解决方案以分析和处理信息。1.3.2 Qt介绍Qt是一个多平台的C+图形用户界面应用程序框架,它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的很容易扩展,并且允许真正地组件编程。Qt是挪威Qt Software的产品,2008年6月17日被芬兰的诺基亚公司收购。Qt 4.6对全新平台提供支持,具有强大的全新图形处理能力并支持多点触摸和手势输入,让高级应用程序和设备的开发过程变得更加轻松和快乐。自从1996年早些时候Qt进入商业领域,它已经成为全
22、世界范围内数千种成功的应用程序的基础。具有以下优点:1. 优良的跨平台特性Qt支持下列操作系统: Microsoft Windows 95/98, Microsoft Windows NT,linux,Solaris,SunOS,HP-UX等等。 2. 面向对象 Qt 的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的,Qt 提供了一种称为 signals/slots 的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。 3. 丰富的API Qt包括多达250个以上的C+ 类,还替供基于模板的collections, serializa
23、tion,file,I/O device,directory management,date/time 类甚至还包括正则表达式的处理功能。5. 大量的开发文档 6. XML 支持1.3.3 OpenCV简介OpenCV是Intel资助的开源计算机视觉库。它由一系列C函数和少量 C+ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV拥有包括300多个C/C+函数的跨平台的中、高层 API,它不依赖与其它的外部库,尽管也可以使用某些外部库。OpenCV对非商业应用和商业应用都是免费的。目前OpenCV库包括以下几个模块: 1. CxCore:包括一些基本功能。从“core核心名字
24、可以看出,该库提供了所有OpenCV运行时的一些最基本的数据结构,包括矩阵,数组的基本运算,包括出错处理的一些基本函数。具体分为下面若干部分: (1)基础结构 (2 )数组操作 (3 )动态结构 (4 )绘图函数 (5 )数据保存和运行时类型信息 (6 )其它混合函数 (7 )错误处理和系统函数2. Cv:图像处理和计算机视觉功能,这是主要的函数库,包括图像处理、结构分析、运动分析、物体跟踪、模式识别和摄像机标定等功能。3. CvAux:附加库函数,包括一些实验性的函数。4. HighGUI:交互部分,HighHGUI只是用来建立快速软件原形或是试验用的。它的设计意图是为用户提供简单易用的图形
25、用户接口。通常,你需要读入源图像到你的程序或者输出结果图像到磁盘。此外,需要简单的方法显示图像到监视器并且向允许(受限的)用户提供输入。OpenCV的功能主要包括以下: 1. 图像数据的操作包括分配、释放、复制、设置和转换。2. 图像和视频的输入输出I/O文包括件与摄像头的输入、图像和视频文件输出。3. 矩阵和微量的操作以及线性代数的算法程序包括矩阵积、解议程、特征值以及奇异值等。4. 各个动态数据结构包括列表、队列、集合、树、图等。5. 数字图像处理包括滤波、边缘检测、角点检测、采样与差值、色彩转换、形态操作、直方图、图像金字塔等。6. 结构分析包括连接部件、轮廓处理、距离变换、各自距计算、
26、模板匹配、Hough变换、多边形逼近、直线拟合、椭圆拟合等。7. 摄像头定标包括发现与跟踪定标模式、定标、矩阵估计、齐次矩阵估计、立体对应。8. 运动分析包括光流、运动分割、跟踪。9. 目标识别如特征法、隐马尔可夫模式。10. GUI实现图像与视频显示、键盘和鼠标事件处理、滚动条等和图像标注如线、二次曲线、多边形、文字。1.3.4 Xvid简介Xvid(旧称为XviD)是一个开放原始码的MPEG-4视频编解码器,它是基于OpenDivX而编写的,性能得到极大的提高,被认为是目前世界上速度最快的mpeg4 codec。Xvid的特点:1. 多种编码模式2. 单重固定码流压缩3. 单重质量模式动态
27、码流压缩4. 单重量化模式动态码流压缩 5. 双重动态码流压缩模式,使视频在占用空间及画面质量之间获得最佳的平衡6. 量化方式和范围控制7. 运动侦测和曲线平衡分配8. 多级运动侦测精度,半像素插值 9. 动态关键帧距10. 心理视觉亮度修正xvid有两种编码方式:single pass和twopass分别实现mpeg4标准中simple profile和advanced simple profile两种模式的要求。1.3.5流媒体技术随着互联网的普及,利用网络传输声音与视频信号的需求也越来越大。广播电视等媒体上网后,也都希望通过互联网来发布自己的音视频节目。但是,音视频在存贮时文件的体积一般
28、都十分庞大。在网络带宽还很有限的情况下,花几十分钟甚至更长的时间等待一个音视频文件的传输,不能不说是一件让人头疼的事。流媒体技术的出现,在一定程度上使互联网传输音视频难的局面得到改善。 传统的网络传输音视频等多媒体信息的方式是完全下载后再播放,下载常常要花数分钟甚至数小时。而采用流媒体技术,就可实现流式传输,将声音、影像或动画由服务器向用户计算机进行连续、不间断传送,用户不必等到整个文件全部下载完毕,而只需经过几秒或十几秒的启动延时即可进行观看。当声音视频等在用户的机器上播放时,文件的剩余部分还会从服务器上继续下载。 流式传输技术又分两种,一种是顺序流式传输,另一种是实时流式传输。 顺序流式传
29、输是顺序下载,在下载文件的同时用户可以观看,但是,用户的观看与服务器上的传输并不是同步进行的,用户是在一段延时后才能看到服务器上传出来的信息,或者说用户看到的总是服务器在若干时间以前传出来的信息。在这过程中,用户只能观看已下载的那部分,而不能要求跳到还未下载的部分。顺序流式传输比较适合高质量的短片段,因为它可以较好地保证节目播放的最终质量。因为它可以较好地保证节目播放的最终质量。它适合于在网站上发布的供用户点播的音视频节目。在实时流式传输中,音视频信息可被实时观看到。在观看过程中用户可快进或后退以观看前面或后面的内容,但是在这种传输方式中,如果网络传输状况不理想,则收到的信号效果比较差。 在运
30、用流媒体技术时,音视频文件要采用相应的格式,不同格式的文件需要用不同的播放器软件来播放,所谓“一把钥匙开一把锁”。 第2章 需求分析视频监控系统是安防与信息技术相结合的高科技产物,在安全防范,案件侦破,校园监考,赛事督管方面作用突出。科技的发展方向与水平是带动整个市场需求与建设进程的原动力,进而为社会的平安,和谐提供强有力的保障。2.1项目概述本视频监控系统是客户端软件部分,是整个网络视频监控系统的一部分,在Visual Studio 2008以及Qt环境下编译,运行,通过OpenCV库函数实现视频的采集,显示,拍照功能,采用Xvid技术实现视频的压缩存放。在Windows平台下,用户可通过主
31、界面的菜单来执行操作,实现静态画面的捕捉、视频采集、存放以及回放等功能。此部分也是最重要的,因为只有有效控制采集跟压缩,得到的信息才会有价值,传输起来方便,快捷。 2.1.1 项目目标计算机操作系统,先进的开发平台上,利用现有的软件,配置一定的硬件,开发一个具有开放体系结构的、易扩充的、易维护的、具有良好人机交互界面的视频监控系统,实现视频静态画面的捕捉,视频的录制等功能。2.1.2 功能描述本系统从摄像头实时采集视频并显示,相片拍照,预览与管理。可将采集到的视频文件压缩成MPEG4格式的文件保存,并可播放保存的MPEG4文件。用户在主界面可直接看到采集窗口,显示当前捕捉到的画面,更有快捷按钮
32、实现相片拍照,和视频录制的开始与结束,也可自行设置相片的存储路径,大小,质量等,录制结束后视频文件自动编码压缩存放在指定位置,在文件操作菜单中可以打开并预览照片和视频,在主界面下方显示拍摄的相片,也可方便的预览,同时删除变的可视化,更人性化的设计了退出系统操作菜单,避免因操作不当引起的崩溃。2.1.3 运行环境首先硬环境方面计算机的配置主流的都可以满足需求,外置摄像头也很重要,性能要好,那样画面会更清晰。软环境方面本系统是在Visual Studio 2008以及Qt环境下编译运行。2.2 系统操作图进入系统是否进入系统主界面是否开始视频录制拍照参数设置视频回放图2-1系统操作图是否进入系统是
33、本系统运行的首要条件,进入后出现系统主界面,这里用户可方便的实现所有的操作,包括静态画面的捕捉、视频采集、存放以及回放等功能。2.3 运行需求运行需求包括硬件接口以及软件接口。2.3.1 硬件接口摄像头:中星微ZC030X USB摄像头,CMOS OV511。嵌入式平台:S3C2440 ARM9 开发板。2.3.2 软件接口在Windows系统下使用了OpenCV的一些库函数(cvCreateFileCapture,cvCreateCameraCapture,cvGrabFrame,cvQueryFrame)以及封装类(VideoCaptureDevice,V4L1VideoCaptureDe
34、vice,CvVideoCaptureDevic)的功能实现摄像头的控制,使用XviD库函数(xvid_global(),xvid_decore()和xvid_encore())进行MPEG4视频的解压缩:xvid_global()实现全局初始化,获取XviD和硬件功能信息(全局信息),色场空间装换功能;xvid_decore()为Xvid解码的核心函数,xvid_encore()是对输入的原始图像进行编码,输出符合MPEG4标准规定的码流。11洛阳理工学院毕业设计(论文)第3章 概要设计本章节是在系统需求分析的基础上,对视频监控系统做概要设计。主要解决了实现该系统需求的程序模块设计问题。包括
35、如何把该系统划分成若干个模块、决定各个模块之间的接口、模块之间传递的信息。3.1 功能划分及模块简介1模块名称:视频采集模块模块功能:从摄像头实时采集画面及视频的录制模块实现:借助OpenCV库函数(cvCreateFileCapture,cvCreateCameraCapture等)实现2模块名称:编码压缩模块模块功能:视频的压缩存放模块实现:借助XviD三个核心接口函数(xvid_global(),xvid_decore()和xvid_encore())实现3.2 视频采集模块的实现方法本系统支持多平台多操作系统,对多种摄像头采集方法的支持,使用工厂模式进行封装,提供了统一的摄像头视频采集
36、接口。如有新的采集方法,只需修改文件videocapturedevicefactory.cpp的内容即可。先将系统的类层次结构列出,下面将详细简绍实现各个模块功能的第三方类库。VideoCaptureDeviceCvVideoCaptureDeviceV4L1VideoCaptureDeviceQWidgetVideoCaptureViewQMainWindowVMSMainWindowVideoCaptureDeviceFactoryCameraSettingsQDialogQToolButtonThumbButtonXvidVideoCaptureDeviceXvidEncode图3-1类
37、层次结构视频采集模块的功能主要通过OpenCV第三方的库函数实现,1. 初始化从文件中获取视频,函数原型为: CvCapture* cvCreateFileCapture( const char* filename );filename 视频文件名。 函数cvCreateFileCapture给指定文件中的视频流分配和初始化CvCapture结构。 2. 初始化从摄像头中获取视频,函数原型为:CvCapture* cvCreateCameraCapture( int index );index要使用的摄像头索引。如果只有一个摄像头或者用哪个摄像头也无所谓,那使用参数-1应该便可以。函数cvCr
38、eateCameraCapture给从摄像头的视频流分配和初始化CvCapture结构。目前在Windows下可使用两种接口:Video for Windows(VFW)和Matrox Imaging Library(MIL); Linux下也有两种接口:V4L和FireWire。3. 释放以上两个结构,使用函数cvReleaseCapture,原型为:void cvReleaseCapture( CvCapture* capture );capture 视频获取结构指针。 函数cvReleaseCapture释放由函数cvCreateFileCapture或者cvCreateCameraCa
39、pture分配的CvCapture结构。4. 从摄像头或者视频文件中抓取帧,函数原型为:int cvGrabFrame( CvCapture* capture );capture 视频获取结构。 函数cvGrabFrame从摄像头或者文件中抓取帧。被抓取的帧在内部被存储。这个函数的目的是快速的抓取帧,这一点对同时从几个摄像头读取数据的同步是很重要的。5. 取回由函数cvGrabFrame抓取的图像,函数原型为:IplImage* cvRetrieveFrame( CvCapture* capture );capture 视频获取结构。 函数cvRetrieveFrame返回由函数cvGrabF
40、rame 抓取的图像的指针。返回的图像不可以被用户释放或者修改。 6. 从摄像头抓取并返回一帧 函数原型为:IplImage* cvQueryFrame( CvCapture* capture );capture 视频获取结构。 函数cvQueryFrame从摄像头中抓取一帧,然后解压并返回这一帧。这个函数仅仅是函数cvGrabFrame和函数cvRetrieveFrame在一起调用的组合。返回的图像不可以被用户释放或者修改。抓取后,capture被指向下一帧,可用cvSetCaptureProperty调整capture到合适的帧。3.3 编码压缩模块的实现方法编码压缩模块通过预定义的Xvi
41、d编码方式进行压缩,采用当今流行的MPEG4文件格式存储。之所以采用MPEG4文件格式是因为MPEG4在1995年7月开始研究,1998年11月被ISO/IEC批准为正式标准,它不仅针对一定比特率下的视频编码,更加注重系统的交互性和灵活性。MPEG4特别针对低带宽等条件设计算法,节省存储空间,并且图像质量好。对于MPEG4视频编码核心来说, XviD 的各种算法设计都有代表性的先进意义。1. 多种编码模式:除了最原始单重估定码流压缩 (1-pass CBR)之外, XviD提供了包括:单重质量模式动态码流压缩、单重量化 (Quantization)模式动态码流压缩、和包括外部控制和内部控制的两
42、种双重 (2-pass)动态码流压缩模式。2. 量化 (Quantization)方式和范围控制量化 (Quantization),简单的说就是在编码时通过对时间或空间上相邻的画面单元进行同化、模糊细节的程度,是对画面质量最基本的控制因素。除了量化方式选择, XviD还提供了强大的对压缩过程中的量化幅度的范围控制。用户可以选定压缩时允许使用的量化幅度范围。3. 心理视觉亮度修正 除了基本的MPEG4编码外, XviD还提供了不少附加功能。其中典型的就是心理视觉亮度修正。这个功能可能通过去除肉眼不能分辨的亮度信号和亮度差异,来提高压缩效率。4. 画面优化译码不仅在编码上XivD拥有强大的功能,在
43、译码时的画面优化方面, XviD也有很多新的建树。例如Horizontal deblock (Y)可以柔化水平方向的亮度马赛克; Horizontal deblock (C)可以柔化水平相的色度马赛克; Deringing(Y)可以柔化环状亮度色斑; Deinging (C)可以柔化环状色度色斑; mosquito可以减少画面中的蚊状噪斑。相信不久的将来,XviD就可以把MPEG4编码的优势发挥到极致, 成为网上视频记录格式的盟主。Xvid的API接口定义的非常清晰,本模块通过其三个核心接口函数(xvid_global(),xvid_decore()和xvid_encore())实现上述功能。
44、xvid_global()函数原型:int xvid_global(void *handle,int opt,void *param1,void *param2)功能:1. 全局初始化 2. 获取XviD和硬件功能信息(全局信息) 3. 色场空间装换参数1. handle, 是一个句柄,代表着一个XviD global操作实例 2. opt,指定要执行的操作,对应上面三种功能,opt分别可取XVID_GBL_INIT、XVID_GBL_INFO、XVID_GBL_CONVERT这样三个值 3. param1,是对应操作的入口参数或者出口参数。当opt为XVID_GBL_INIT时,param1
45、是入口参数,应当为一个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解码的核心函数,其函数原型为:Int xvid_decore(void*handle,int opt,void*param1,void*param
46、2);参数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参数的取值
47、而定,比如,当 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()函数原型定义如下:int xvid_encore(void *ha