毕业设计(论文)基于VC++的视频采集系统的开发

上传人:痛*** 文档编号:40627780 上传时间:2021-11-16 格式:DOC 页数:29 大小:571.03KB
收藏 版权申诉 举报 下载
毕业设计(论文)基于VC++的视频采集系统的开发_第1页
第1页 / 共29页
毕业设计(论文)基于VC++的视频采集系统的开发_第2页
第2页 / 共29页
毕业设计(论文)基于VC++的视频采集系统的开发_第3页
第3页 / 共29页
资源描述:

《毕业设计(论文)基于VC++的视频采集系统的开发》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于VC++的视频采集系统的开发(29页珍藏版)》请在装配图网上搜索。

1、毕业设计论文_基于VC+的视频采集系统 本科生毕业设计(论文)( 2010届 )题 目: 基于VC+的视频采集系统的开发 专 业: 通信工程 学生姓名: 学号: 06226232 指导教师: 职称: 教授 合作导师: 职称: 完成时间: 2010 年 4月 20日 成 绩: 27浙江师范大学本科毕业设计(论文)正文目 录摘要1英文摘要1 1 引言21.1 开发背景与现状21.2 开发设计的意义21.3 开发工具31.3.1 VFW(Video for Windows)简介31.3.2 Microsoft Visual C+ 6.0简介42 系统分析 5 2.1 可行性分析 5 2.2 系统开发

2、流程分析 63 总体设计 9 3.1 系统设计目标 9 3.2 系统总体功能 9 3.3 系统结构图 104 详细设计 11 4.1 VC+编程设计 11 4.1.1 VC+引入11 4.1.2 VC+编程规范11 4.2 模块设计15 4.2.1 系统模块设计155 编码、实现与测试 19 5.1 系统编码设计 19 5.2 系统测试 236 开发总结24 7 致谢258 参考文献26基于VC+的视频采集系统的开发专业:通信工程 指导老师:摘要:随着多媒体技术的飞速发展,各行业对多媒体技术的应用也越来越广泛,传统的视频采集技术存在着一定的局限性,不能很好的应用于当前的视频系统。本文基于Web

3、Cam(现成的摄像头,通过USB连接)的视频采集技术可以分为硬件和软件两部分:硬件部分:主要为摄像头,功能是把现实中的视频源以画面的形式捕捉下来,通过USB数据接口与电脑相连并把捕捉的画面以数字信号的形式实时传输给电脑。软件部分:也是本论文主要研究的方面,主要是电脑接收到视频信号以后在电脑上显示出来,具有拍摄,保存等功能,并可以进行个性化设置,如画面的大小、图像质量、图像格式等等。在软硬件环境及研究现状进行详细分析的基础上,运用VFW(Video for Windows)组件,以MS VC+6.0作为编程语言和程序开发工具,实现了视频设备自动检测、视频设备的参数设置、视频图像连续采集、视频流图

4、像单帧捕获和保存等基本功能,其操作简单,界面友好,性能稳定。关键词:基于VC+的视频采集系统;USB数据接口;WebCam;VFW;VC+Development And implementation Based on VC + + Video Capture SystemAuthor:Shenxiaofei Director:Yangfan(Dept.of Science &Engineering,Zhejiang Normal University ,993 No.29)Abstract:At present, the rapid development of multimedia

5、technology, the industry application of multimedia technology are increasingly being used, the traditional video capture technologies have some limitations, not well applied in the current video systems. Based on WebCam (ready-made camera, via USB connection) the video capture hardware and software

6、technology can be divided into two parts: hardware: main camera function is the reality in the form of video sources to capture the screen down, through the USB data interface connected to your computer and to capture images in the form of real-time digital signal transmission to the computer. Softw

7、are components: also aspects of this study is primarily a computer to receive the video signal displayed on after the computer has taken to preserve other functions, and can personalize the settings such as screen size, image quality, image format, etc. and so on. After analysis, the system uses the

8、 VFW, with VC + + for the front-end application development tools, system implementation of video acquisition, image drawings, parameter adjustment necessary function, and its simple, user-friendly, more stable operation.Key Words:VC + + based video acquisition system; USB data interface; WebCam; VF

9、W; VC + +1 引言1.1 开发背景与现状 随着科技的不断进步以及人民生活水平的不断提高,以前那种只靠简单的文字、声音进行交流的方式已经不能满足当今社会的要求,以可视电话、视频会议、网络监控、视频广播等技术为代表的多媒体技术蓬勃发展起来,成为当今社会的研究热点。这其中的很重要的一项技术就是把静态和动态的图像以原始状态捕捉下来-视频采集。视频采集系统的应用领域越来越广泛,视频采集以其直观、方便、信息内容丰富而广泛应用于许多场合。银行,酒店,停车场、车站,十字路口,小区门口等等都应用到了这一项技术。实时、高品质的图像和视频给使用者带来了更直观、更感性的认识。因此视频采集技术的重要性渐渐体现出

10、来。随着社会的快速发展,视频技术在以后的生产生活中的运用会更加广泛。随着计算机技术、网络技术、视频捕捉技术等高科技技术的发展,视频技术也得到了迅速发展。数字图像采集的性能有了很大的提高,随着CCD制造工艺的提高。800万象素的CCD已经成为主流,2000万象素的CCD器件也研制成功,同时终端显示的能力也相应有了进步。图像和视频的清晰度主要取决于摄像机的水平分辨率和后端的显示设备的解析能力,高清摄像头的出现大大提高了图像的清晰度,使得图像细节更加清晰和细腻。软件方面,程序必然会朝着全面化,个性化,细腻化的趋势发展。功能越来越多,个性选择越来越丰富,程序画面会越来越美观,程序运行将更加稳定,兼容性

11、更好。1.2 开发设计的意义随着科技的不断进步以及人民生活水平的不断提高,以前那种只靠简单的文字、声音进行交流的方式已经不能满足当今社会的要求,以可视电话、视频会议、网络监控、视频广播等技术为代表的多媒体技术蓬勃发展起来,成为当今社会的研究热点。这其中的很重要的一项技术就是把静态和动态的图像以原始状态捕捉下来-视频采集。视频采集系统的应用领域越来越广泛,视频采集以其直观、方便、信息内容丰富而广泛应用于许多场合。银行,酒店,停车场、车站,十字路口,小区门口等等都应用到了这一项技术。实时、高品质的图像和视频给使用者带来了更直观、更感性的认识。因此视频采集技术的重要性渐渐体现出来。随着社会的快速发展

12、,视频技术在以后的生产生活中的运用会更加广泛。1.3 开发工具1.3.1 VFW(Video for Windows)简介VFW是微软公司1992年推出的关于数字视频的一个软件包,它能使应用程序通过数字化设备从传统的模拟视频源得到数字化的视频剪 辑。VFW的一个关键思想是播放时不需要专用硬件,为了解决数字视频数据量大的问题,需要对数据进行压缩。它引进了一种叫AVI的文件标准,该标准未规定 如何对视频进行捕获、压缩及播放,仅规定视频和音频该如何存储在硬盘上,以及在AVI文件中交替存储视频帧和与之相匹配的音频数据。VFW给程序员提 供.VBX和AVICap窗口类的高级编程工具,使程序员能通过发送消

13、息或设置属性来捕获、播放和编辑视频剪辑。在Windows 9x系统中,当用户在 安装VFW时,安装程序会自动地安装配置视频所需要的组件,如设备驱动程序、视频压缩程序等。VFW主要由以下6个模块组成:  AVICAP.DLL:包含执行视频捕获的函数,它给AVI文件的I/O处理和视频、音频设备驱动程序提供一个高级接口;  MSVIDEO.DLL:包含一套特殊的DrawDib函数,用来处理屏幕上的视频操作; MCIAVI.DRV:包括对VFW的MCI命令解释器的驱动程序;  AVIFILE.DLL:包含由标准多媒体I/O(mmio

14、)函数提供的更高的命令,用来访问.AVI文件; 压缩管理器(ICM):用于管理的视频压缩/解压缩的编译码器(Codec); 音频压缩管理器ACM:提供与ICM相似的服务,适用于波形音频。AVICap在显示视频时提供的两种模式:(A)预览(Preview)模式:该模式使用CPU资源,视频帧先从捕获硬件传到系统内存,接着采用GDI函数在捕获窗中显示。在物理上,这种模式需要通过VGA卡在监视器上显示。(B)叠加(Overlay)模式:该模式使用硬件叠加进行视频显示,叠加视频的显示不经过VGA卡,叠加视频的硬件将VGA的输出信号与其自身的输出信号合并,形成组合信号显示在计算机的监视

15、器上。只有部分视频捕获卡才具有视频叠加能力。Visual C+ 在支持VFW方面提供有vfw32.lib、 msacm32.lib 、winmm.lib等类似的库。特别是它提供了功能强大、简单易行、类似于 MCIWnd的窗口类AVICap。AVICap为应用程序提供了一个简单的、基于消息的接口,使之能访问视频和波形音频硬件,并能在将视频流捕获到硬盘上的过程中进行控制。1.3.2 Microsoft Visual C+ 6.0简介Microsoft Visual C+,(简称Visual C+、MSVC、VC+或VC)微软公司的C+开发工具,具有集成开发环境,可提供编辑C语言,C+以及C+/CL

16、I等编程语言。VC+整合了便利的除错工具,特别是整合了微软视窗程式设计(Windows API)、三维动画DirectX API,Microsoft .NET框架。目前最新的版本是Microsoft Visual C+ 2008。Microsoft Visual C+,(简称Visual C+、MSVC、VC+或VC)微软公司的C+开发工具,具有集成开发环境,可提供编辑C语言,C+以及C+/CLI等编程语言。VC+整合了便利的除错工具,特别是整合了微软视窗程式设计(Windows API)、三维动画DirectX API,Microsoft .NET框架。目前最新的版本是Microsoft V

17、isual C+ 2008。Visual C+以拥有“语法高亮”,IntelliSense(自动编译功能)以及高级除错功能而著称。比如,它允许用户进行远程调试,单步执行等。还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。其编译及建置系统以预编译头文件、最小重建功能及累加连结著称。这些特征明显缩短程式编辑、编译及连结的时间花费,在大型软件计划上尤其显著。Microsoft Visual C+ 6.0,集成了MFC6.0,于1998发行。发行至今一直被广泛地用于大大小小的项目开发。但是,这个版本在WindowsXP下运行会出现问题,尤其是在调试模式的情况下(例如:静态变量

18、的值并不会显示)。 这个调试问题可以通过打一个叫“Visual C+ 6.0Processor Pack”的补丁来解决。C+的设计原则 C+设计成静态类型、和C同样高效且可移植的多用途程序设计语言。 C+设计成直接的和广泛的支援多种程序设计风格(程序化程序设计、资料抽象化、面向对象程序设计、泛型程序设计)。 C+设计成给程序设计者更多的选择,即使可能导致程序设计者选择错误。 C+设计成尽可能与C兼容,籍此提供一个从C到C+的平滑过渡。 C+避免平台限定或没有普遍用途的特性。 C+不使用会带来额外开销的特性。 C+设计成无需复杂的程序设计环境。出于保证语言的简洁和运行高效等方面的考虑,C+的很多

19、特性都是以库(如STL)或其他的形式提供的,而没有直接添加到语言本身里。关于此类话题,C+之父的C+语言的设计和演化 里做了详尽的陈述。2 系统分析2.1 可行性分析一、经济的可行性 主要从对项目的经济上进行分析评价,一方面是支出的费用,包括设备购置费、管理和维护费用、人员工资和培训费等,另一个是取得的收益。这是个超小型的管理系统,从投入的人力,财力与物力来讲是非常之小的,只要一台电脑,一部USB接口高清摄像头,这个系统就可以搞起来,考虑到学校里有电脑,现只要购置一部USB接口高清摄像头就可以了。从节省人力方面,可以让管理人员从繁与复杂的工作中解脱出来,做更多的工作。2、 技术上的可行性 VF

20、W(Video for Windows)是Microsoft推出的关于数字视频的一个软件开发包,在VC+开发环境中调用VFW和使用其它开发包没有什么不同,只是需要将VFW32.lib文件加入工程中。VFW为开发人员提供了很多的接口,开发人员可以使用这些接口在视频采集过程中抓取图片、在采集窗口中预览采集的视频、设置采集参数及显示视频源、视频格式、压缩格式的设置对话框。开发VFW视频采集软件,一般的开发步骤如下:· 创建视频采集窗口 · 关联采集窗口与采集驱动程序 · 设置采集参数 · 响应用户的操作,开始/结束视频采集三、总结 通过以上两点的分析,编写或开

21、发这个视频采集系统是可行的,只要这个系统能利用摄像头实现对视频的采集、抓图功能以及部分参数调整就可以了。从整体角度来讲,此系统的开发时完全可以实现的。本论文的关键问题是通过调用程序自定义的回调函数来实现程序画面显示一个实时的视频信号并具有拍摄,保存和查看的功能。难点包括让程序运行的更加稳定,程序画面更加个性化和美观化,让使用者有更多的视频参数选择和具有一个较好的画面效果。2.2系统开发流程分析初始化操作 1、创建捕获窗口 函数 capCreateCaptureWindow() 返回视频捕获窗口,它是所有捕获工作及设置的基础,其主要功能包括: 动态地同视频和音频输入器连接或断开; 设置视频捕获速

22、率; 提供视频源、视频格式以及是否采用视频压缩的对话框; 设置视频采集的显示模式为Overlay或为Preview; 实时获取每一帧视频数据; 将一视频流和音频流捕获并保存到一个AVI文件中; 捕获某一帧数字视频数据,并将单帧图像以DIB格式保存; 指定捕获数据的文件名,并能将捕获的内容拷贝到另一文件。 HWND m_hCapWnd = capCreateCaptureWindow("Capture",WS_POPUP,0,0,1,1,0,0);2、关联窗体到本程序实例 capSetUserData(m_hCapWnd, this); m_hCapWnd窗口句柄相当于vfw

23、捕获活动的基础,他就代表了这个捕获。3、登记回调函数 登记回调函数用来实现用户的一些特殊需要。在以一些实时监控系统或视频会议系统中,需要将数据流在写入磁盘以前就必须加以处理,达到实时功效。应用程序可用捕获窗来登记回调函数,以便及时处理以下情况:捕获窗状态改变、出错、使用视频或音频缓存、放弃控制权等,相应的回调函数分别为 capStatusCallback(), capErrorCallback(), capVideoStreamCallback(), capWaveStreamCallback(),capYieldCallback()。 例如,设置回调函数: capSetCallbackOnV

24、ideoStream(m_hCapWnd, OnCaptureVideo);4、获得安装的捕获驱动程序的名称和版本 capGetDriverDescription(iIndex, szDevName, MAX_PATH, szDevVersion, MAX_PATH); szDevName和szDevVersion返回当前第iIndex个设备的设备名称和版本。5、连接捕获窗口与视频捕获卡 capDriverConnect(m_hCapWnd, iIndex);6、获取捕获窗口的缺省参数 CAPTUREPARMS CapParms = 0; capCaptureGetSetup(m_hCapWn

25、d, &CapParms, sizeof(CapParms);7、修改刚刚获得的参数 CapParms.fAbortLeftMouse = FALSE; / 退出鼠标设置 CapParms.fAbortRightMouse = FALSE; / . CapParms.fYield = TRUE; / 使用背景作业 CapParms.fCaptureAudio = FALSE; / 不获取声音 CapParms.wPercentDropForError = 50; / 允许遗失的百分比8、设置捕获窗口的相关参数 capCaptureSetSetup(m_hCapWnd, &Cap

26、Parms, sizeof(CapParms);9、获得视频的格式、大小 capGetVideoFormat(m_hCapWnd, &m_BmpInfo, sizeof(m_BmpInfo);10、更改视频的尺寸 m_BmpInfo.bmiHeader.biWidth = 176; m_BmpInfo.bmiHeader.biHeight = 144;11、设置新的视频属性 capSetVideoFormat(m_hCapWnd, &m_BmpInfo, sizeof(m_BmpInfo) (不更改视频尺寸或者设置属性不正确运行时会出错!)开始捕获(不使用磁盘存储的捕获) 12

27、、初始化Dib HDRAWDIB m_hDib = :DrawDibOpen();13、开始绘制Dib :DrawDibBegin(m_hDib, m_hDC, -1, / don't stretch -1, / don't stretch &m_BmpInfo.bmiHeader, IMAGE_WIDTH, / width of image IMAGE_HEIGHT, / height of image 0);14、开始捕获 capCaptureSequenceNoFile(m_hCapWnd);结束退出 15、结束绘制Dib,关闭Dib: :DrawDibEnd(m

28、_hDib); :DrawDibClose(m_hDib);清除采集过程 16、停止采集过程 capCaptureAbort(m_hCapWnd);17、使回调函数无效 capSetCallbackOnVideoStream(m_hCapWnd, NULL);18、断开与设备的连接 capDriverDisconnect(m_hCapWnd);在回调函数中的操作 19、关联数据到一个捕获窗体 CVideoCapture *vidcap=(CVideoCapture *)capGetUserData(hwnd); 注意其返回一个当前实例指针!因为其参数是通过回调函数参数传递而来的m_hCapWn

29、d。 获取采集设备的功能和状态: 通过宏capDriverGetCaps(hWndCap,&m_CapDrvCap,sizeof(CAPDRIVERCAPS)来获取视频设备的能力,通过宏capGetStatus(hWndCap,&m_CapStatus,sizeof(m_CapStatus)来获取视频设备的状态。3 总体设计3.1 系统设计目标目标本系统既要满足用户的设计,也要满足设计员的设计目标。1、用户的观点看,要求系统能够达到以下目标 1) 对信息的收集和保存信息。例如:视频信息的采集和保存等. 2)快速的传递信息。对那些共享的数据要快速的传递。 3)提供准确的信息。要求

30、比手工作业提供的更加准确和细致的数据。2、设计员从技术观点看,要求系统能达到以下的目标:1) 用户使用,具有较高的用户友好性。2) 有较高的可靠性,将系统发生故障的概率控制在5.0以下,并具有快速恢复的能力3) 具有较高的运行效率,应比人工作业提高效率高。4)具有较强的可维护性和扩充性,能够适应用户的业务要求变化。3、设计策略 本系统的结构是自顶向下扩展的,层次化的暗盒模块结构。对高层模块,将使用以事务为中心的设计策略,把一个的的复杂的系统逐步分解成较小的相对简单的暗合模块;对低层模块,采用以变换为中心的设计策略。此外,为了提高模块的内聚性,降低模块间的偶合程度,数据库的设计原则是把他作为模块

31、间的邮政信箱,从而既实现数据共享有提高模块的独立性,使系统具有很高的可修改性。3.2 系统总体功能 本说明书主要是为了对视频采集系统进行使用和维护。 该系统充分利用计算机的功能实现对即时摄像头采集到的信息进行录像和抓图,并图视频的音频字幕等参数进行合理的设置,此外还要对采集到的信息进行合理性的保存,包括采集到的视频的保存格式、抓图后的图片的保存格式等。3.3 系统结构图 1、基于VC+的视频采集系统基于VC+的视频采集系统 文件 播放、停止、全屏 图3-3-1 2、文件模块文件模块 退出设置打开 图3-3-2 3、播放模块 播放模块开始、停止、全屏抓图录像前端显示 图3-3-3 4 详细设计4

32、.1 数据库设计4.1.1 C+编程的引入 随着计算机软件、硬件技术的日新月异的发展和普及,人类已进入一个高速发展的信息化时代,人类大概有80%的信息来自图像,科学研究、技术应用中图像处理技术越来越成为不可缺少的手段。图像处理所涉及的领域有军事应用、医学诊断、工业监视、物体的自动分检识别系统等等,这些系统无不必计算机提供实时动态,效果逼真的图像。基于图像采集卡的视频图像处理系统计算机图像处理系统从系统层次上可分为高、中、低档三个层次,目前一般比较普及的是低档次的系统,该系统由CCD(摄像头)、图像采集卡、计算机三个部分组成,其结构简单,应用方便,效果也比较不错,得到的图像较清晰。目前网上基于V

33、C研发经验的文章不少,可是关于怎么在VC研发平台上使用图像采集卡的文章确没发现,笔者针对在科研研发中积累的使用图像采集卡经验,介绍怎么自己是怎么将采集卡集成到图像研发系统中,希望能够给目前正需要利用图像采集卡研发自己的图像处理系统的朋友有所帮助。笔者使用的摄像机采用台湾BENTECH INDUSTRIAL 有限公司生产的CV-155L黑白摄像机。该摄像机分辨率为752x582。图象采集卡我们采用北京中科院科技嘉公司研发的基于PCI 总线的CA-MPE 1000 黑白图象采集卡。使用图像采集卡分三步,首先安装采集卡的驱动程式,并将虚拟驱动文件VxD.vxd拷贝到视窗系统的SYSTEM目录下;这时

34、候就能进入研发状态了,进入VC研发平台,生成新的项目,由于生产厂家为图像采集卡提供了以mpew32.dll、mpew32.lib命名的库文件,库中提供了初始硬件、采集图像等函数,为使用这些函数,在新项目上连接该动态库;最后一步就是采集图像并显示处理了,这一步要设置系统调色板,因为采集卡提供的是裸图像式,既纯图像数据,没有图像的规格和调色板信息,这些需要研发者自己规定实现,4.1.2 VC+编程规范【规则1】标识符应简单明了,望文知意。标识符采用英文单词。切忌使用汉语拼音来命名。程序中的英文单词一般不要太复杂,用词应当准确。例如不要把CurrentValue写成NowValue。尽量不要使用单词

35、缩写或首字母缩写。只有当标识符过长时才考虑使用单词缩写。在使用缩写时,不要自创缩写,尽量使用被广泛接受的缩写。【规则2】标识符长度应当符合“min-length && max-information”原则。一般的讲,长名字能更好地表达含义,所以函数名、变量名、类名长达十几个字符不足为怪。但是名字也不是越长越好。例如:变量名maxval就比maxValueUntilOverflow更好用。单字符的名字也是有用的,常见的如i,j,k,m,n,x,y,z等,它们通常用作函数内的局部变量。【规则3】命名规则尽量与所采用的操作系统或开发工具的风格保持一致。例如Windows应用程序的标识

36、符通常采用“大小写”混排的方式,如AddChild。而Unix应用程序的标识符通常采用“小写加下划线”的方式,如add_child。别把这两类风格混在一起用。【规则4】程序中不要出现仅靠大小写区分的标识符。例如:int x和int X;void foo() 和void FOO() 等。【规则5】避免在不同级别的作用域中重名。程序中不要出现标识符完全相同的局部变量和全局变量,尽管两者因作用域的不同而不会发生语法错误,但会使人产生误解。【规则6】正确命名具有互斥意义的标识符。使用正确的反义词组命名具有互斥意义的变量或相反动作的函数。如:"MinValue"和"MaxV

37、alue","GetName()" 和 "SetName()"【规则7】尽量避免名字中出现数字编号。如Value1,Value2等,除非逻辑上的确需要编号。这是为了防止程序产生无意义的名字,降低程序的可读性。【规则8】使用库标志在开发动态库时,为了防止软件库中的一些标识符和其它软件库中标识符冲突,可以为各种标识符加上能反映软件性质的前缀。例如三维图形标准OpenGL的所有库函数均以gl开头,所有常量(或宏定义)均以GL开头4.1.2 VC+编程设计当前,在Windows操作系统自身就携带了VFW,系统安装时,会自动安装VFW的相关组件。VC+自

38、4.0以来就支持VFW,大大简化了视频应用程序的开发。目前,PC机上多媒体应用程序的视频部分,大都是利用VFW API开发的。 1 VFW 的体系结构 VFW以消息驱动方式对视频设备进行存取,可以很方便地控制设备数据流的工作过程。目前,大多数的视频采集卡驱动程序都支持VFW接口,它主要包括多个动态连接库,通过这些组件间的协调合作,来完成视频的捕获、视频压缩及播放功能。VFW体系结构如图1所示。 1)VICAP.DLL:主要实现视频捕获功能,包含了用于视频捕获的函数,为音像交错AVI (Audio video interleaved)格式文件和视频、音频设备程序提供一个高级接口。 2)MSVID

39、EO.DLL:能够将视频捕获窗口与获驱动设备连接起来,支持ICM视频编码服务。 3)MCIAVI.DRV:包含MCI(Media control interface)命令解释器,实现回放功能。 4)AVIFILE.DLL:提供对AVI文件的读写操作等文件管理功能。5)ICM ( Installable compression manager ):即压缩管理器,提供对存储在AVI文件中视频图像数据的压缩、解压缩服务。         6)ACM ( Audio Compression Manager ):即音频压缩管

40、理器,提供实时音频压缩及解压缩功能。 2 视频捕获 视频数据的实时采集,主要通过AVICAP模块中的消息、宏函数、结构以及回调函数来完成。视频捕获的一般过程如下: 2.1建立捕获窗口 利用AVICAP 组件函数 capCreateCaptureWindow() 建立视频捕获窗口,它是所有捕获工作及设置的基础,其主要功能包括:动态地同视频和音频输入器连接或断开; 设置视频捕获速率; 提供视频源、视频格式以及是否采用视频压缩的对话框; 设置视频采集的显示模式为Overlay或为Preview; 实时获取每一帧视频数据; 将一视频流和音频流捕获并保存到一个AVI文件中; 捕获某一帧数字视频数据,并将

41、单帧图像以DIB格式保存; 指定捕获数据的文件名,并能将捕获的内容拷贝到另一文件。 2.2登记回调函数2 登记回调函数用来实现用户的一些特殊需要。在以一些实时监控系统或视频会议系统中,需要将数据流在写入磁盘以前就必须加以处理,达到实时功效。应用程序可用捕获窗来登记回调函数,以便及时处理以下情况:捕获窗状态改变、出错、使用视频或音频缓存、放弃控制权等,相应的回调函数分别为 capStatusCallback(), capErrorCallback(), capVideoStreamCallback(), capWaveStreamCallback(),capYieldCallback()。 2.

42、3获取捕获窗口的缺省设置 通过宏capCaptureGetSetup(hWndCap,&m_Parms,sizeof(m_Parms)来完成。2.4设置捕获窗口的相关参数 通过宏capCaptureSetSetup(hWndCap,&m_Parms,sizeof(m_Parms)来完成。 2.5连接捕获窗口与视频捕获卡 通过宏capDriveConnect(hWndCap,0)来完成。2.6获取采集设备的功能和状态 通过宏capDriverGetCaps(hWndCap,&m_CapDrvCap,sizeof(CAPDRIVERCAPS)来获取 视频设备的能力,通过宏c

43、apGetStatus(hWndCap,&m_CapStatus,sizeof(m_CapStatus) 来获取视频设备的状态。2.7设置捕获窗口显示模式 视频显示有Overlay(叠加)和Preview(预览)两种模式。在叠加模式下,捕获视频数据布展系统资源,显示速度快,视频采集格式为YUV格式,可通过capOverlay(hWndCap,TRUE)来设置;预览模式下要占用系统资源,视频由系统调用GDI函数在捕获窗显示,显示速度慢,它支持RGB视频格式。2.8捕获图像到缓存或文件并作相应处理 若要对采集数据进行实时处理,则应利用回调机制,由capSetCallbackOnFrame(

44、hWndCap, FrameCall-backProc)完成单帧视频采集;由capSetCallbackOnVideoStream(hWndCap, VideoCallbackProc)完成视频流采集。如果要保存采集数据,则可调用capCaptureSequence(hWnd);要指定文件名,可调用capFileSetCap- ture(hwnd, Filename)。 2.9终止视频捕获断开与视频采集设备的连接 调用capCatureStop(hWndCap)停止采集,调用capDriverDisconnect(hWndCap), 断开视频窗口与捕获驱动程序的连接。 3 视频编辑和播放 利用

45、VFW,不仅可以实现视频流的实时采集,还提供了编辑和播放功能,主要通过AVIFILE、ICM、ACM、MCIWnd 等组件之间的协作来完成。 1) AVIFileInit();/初始化; 2) AVIFileOpen(); /打开一个AVI文件并获文件的句柄; 3) AVIFileInfo(); /获取文件的相关信息,如图像的Width和Height等; 4) AVIFileGetStream(); /建立一个指向需要访问的数据流的指针; 5) AVIStreamInfo(); /获取存储数据流信息的AVISTREAMINFO结构; 6) AVIStreamRead(); /读取数据流中的原始

46、数据, 对AVI文件进行所需的编辑处理; 7) AVIStreamRelease(); /释放指向视频流的指针; 8) AVIFileRelease();AVIFileExit(); /释放AVI文件。 若数据是压缩过的,则用AVIStreamGetFrameOpen(),AVIStreamGetFrame()和AVIStreamGetFrameClose()来操作,可以完成对视频流的逐帧分解。 3.2 视频播放 对于实现视频流的播放,VFW提供了MCIWnd窗口类4,主要用于创建视频播放区,控制并修改MCI窗口当前加载媒体的属性。一个由函数、消息和宏组成的库与MCIWnd相关联,通过它们可以

47、进行AVI文件操作,很方便地使应用程序完成视频播放功能。 1)MCIWndCreate(); /注册MCIWnd窗口类,创建MCIWnd窗口,并指定窗口风格; 2)AVIFileInit(); /初始化; 3) AVIFileOpen(); /打开AVI文件; 4) AVIFileGetStream(); /获得视频流; 5)运用相关函数进行各种播放任务:MCIWndPlay() 4.2 模块设计4.2.1 系统模块设计对本系统的各个子模块进行了系统分析和VC+编程设计之后,本章将主要讨论该系统所实现的各部分功能:(1)视频主界面图4-2-1运行文件后主界面启动,可以根据客户的不同需要采取不同

48、的操作模式,实现系统的应用。(2)捕捉视频及图像界面图4-2-2 利用高清外置对视频信息进行采集捕捉。(3)文件模块图4-2-3内容包括打开,设置,退出。打开用于打开摄像文件以及音频等文件,用于视频采集过程的编辑;设置主要是对系统的参数进行调整以使系统更加的完善;退出即退出系统。(4)播放模块图4-2-4内容主要包括开始、停止、录像、抓图、全屏、前端显示等内容,并且为各个功能设置了英文首字标示,具体内容如图图4-2-4所示。(5)设置模块图4-2-5此版块主要对系统的视频设备、视频格式、音频设备、音频格式、音频输入、混合字幕等内容进行设置,具体的内容在下面将具体的介绍,设置界面的如图图4-2-

49、5所示:(6)视频属性设置界面图4-2-6此项目主要是对视频采集和保存的各项参数进行设置以保证有清晰完整的画面显示,具体的界面内容如图图4-2-6所示:(6)音频属性设置界面图4-2-7此项目主要是对视频采集和保存的各项参数进行设置以保证有清晰完整的音频显示效果,具体的界面内容如图图4-2-7所示:(6)混合字幕属性设置界面图4-2-8此项目主要是对采集的视频的主界面的字幕情况进行设置,以保证有较为湾内的画面,具体的界面内容如图图4-2-8所示:(7)字幕显示情况如下图所示图4-2-9(8)抓图保存界面图4-2-10对于抓图的格式默认格式选择了bmp格式,另外也可以现在所有格式按照自己的需要设

50、置文件的格式,只需要在文件名内加上后缀名酒可以啦,例如:a.jpg(8)录像保存界面图4-2-11对于录像的格式默认格式选择了avi格式,另外也可以现在所有格式按照自己的需要设置文件的格式,只需要在文件名内加上后缀名就可以啦,例如:a.rmvb(9)便捷窗口图4-2-12在主界面的左下角设置了,开始暂停、停止、全屏等按钮,可以方便的实现各自的快捷功能,具体如图图4-2-12所示:5 编码、实现与测试5.1 系统编码设计(1)创建视频窗口视频窗口与视频采集的驱动程序关联,它接收各种视频采集相关的消息,并根据这些消息控制视频采集设备的各种操作。后续的所有视频采集消息全部发送给视频采集窗口。要创建视

51、频采集窗口可以通过调用capCreateCaptureWindow函数实现。我们可以通过在MFC的View类中增加一个窗口句柄成员变量来保存capCreateCaptureWindow函数返回的采集窗口句柄,然后在View类的OnCreate函数中添加以下语句。 m_caphwnd = capCreateCaptureWindow(_T("My Capture Window"),WS_CHILD | WS_VISIBLE,0,0,500,600,this->GetSafeHwnd(),1);(2)连接采集驱动 创建采集窗口后,需要将采集窗口与采集驱

52、动程序关联起来。 为了验证当前PC机上是否安装的视频采集设备,可以在关联驱动程序之前调用capGetDriverDescription函数枚举一下系统中的采集驱动,代码如下: int i = 0; wchar_t sdriver50;/驱动信息 wchar_t sver50;/版本信息 CString m_driverInfo(""); for ( i = 0; i < 10; i+ )   if ( capGetDriverDescription(i,sdriver,50,sver,50

53、) )    m_driverInfo += sdriver;   m_driverInfo += "n"   m_driverInfo += sver;   m_driverInfo += "n"   memset(sdriver,0,50 * sizeof(wchar_t);   memset(sver,0,50 * sizeof(wchar_t);  

54、  if ( !m_driverInfo.IsEmpty() )   /显示驱动程序信息  AfxMessageBox(m_driverInfo);  else   AfxMessageBox(_T("No Capture!"); 确认当前系统中安装有采集设备后,可以使用capDriverConnect宏向视频采集窗口发送连接采集驱动的消息,代码如下: /关联第一个驱动 capDriverConnect(m_caphwnd,0);(3)视频采集摄像头:(如下图所示,

55、品牌-奥家; 像素-800万;免驱动)(4)设置采集参数 在视频采集之前,可以通过capCaptureGetSetup宏取得视频采集参数,然后通过capCaptureSetSetup宏将新设定的采集参数传递到采集窗口,由采集窗口控制采集驱动程序。代码如下: CAPTUREPARMS s; capCaptureGetSetup(m_caphwnd,&s,sizeof(CAPTUREPARMS);/取得采集参数 s.dwRequestMicroSecPerFrame = 33333;/采集一帧花费1/30秒 s.fAbortLeftMous

56、e = FALSE;/压下鼠标左键不终止采集 s.fAbortRightMouse = FALSE;/压下鼠标右键不终止采集 s.fCaptureAudio = TRUE;/c采集音频 s.fYield = TRUE;/使用一个独立的线程来采集视频,不使用View窗口线程 capCaptureSetSetup(m_caphwnd,&s,sizeof(CAPTUREPARMS);/设定采集参数 还可以通过capGetVideoFormat宏取得视频格式,然后通过capSetVideoFormat设定视频格式。参考代码如下: LPBITMA

57、PINFO bitmapinfo; DWORD bit_info_size = 0; /取得视频格式信息的大小 bit_info_size = capGetVideoFormatSize(m_caphwnd); bitmapinfo = (LPBITMAPINFO)GlobalAlloc(GHND,bit_info_size); /取得视频格式信息 capGetVideoFormat(m_caphwnd,bitmapinfo,bit_info_size); /设置视频格式信息 bitmapinfo->bmiH

58、eader.biCompression = BI_RLE4;/设置压缩格式为JPEG bitmapinfo->bmiHeader.biWidth = 640;/设置解压缩后的水平像素为640 bitmapinfo->bmiHeader.biHeight = 480;/设置解压缩后的垂直像素为480 /设置视频格式 capSetVideoFormat(m_caphwnd,bitmapinfo,bit_info_size);注意,如果驱动程序不支持以上参数,以上设定是无效的,驱动程序还是使用默认的设置参数。(5)开始/结束视频采集我们可以在菜单中

59、添加一个视频采集开始的菜单项,在此菜单项的响应函数中使用capCaptureSequence宏开始视频采集。  capCaptureSequence(m_caphwnd);同样,我们也可以添加视频结束的菜单项,在此菜单项的响应函数中使用capCaptureStop宏终止采集操作,然后使用capFileSaveAs宏将采集的视频保存到指定的文件中,如果不指定文件,默认保存到C盘CAPTURE.AVI文件中。 capCaptureStop(m_caphwnd); capFileSaveAs(m_caphwnd,_T("cap.avi");我们也可以在采集窗口中预览采集的视频,预览终止后,视频并不保存到文件中。预览的代码如下:  capPreview(m_caphwnd,TRUE);  capPreview(m_caphwnd,FALSE);(6)图片抓取我们可以使用capGrabFrameNoStop宏抓取图片,然后使用capFileSaveDIB宏将采集的图片保存为DIB文件,因为DIB文件的大小比bmp等文件大很多,我们可以使用CImage类将DIB文件转换成bmp等文件。代码如下: CF

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!