基于Windows几种视频采集方法设计与实现.docVIP

基于Windows几种视频采集方法设计与实现.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于Windows几种视频采集方法设计与实现

基于Windows几种视频采集方法设计与实现   [摘要]分别介绍在Windows操作系统下的三种实时视频数据采集的方法,即基于VFW的实时视频采集,基于DirectShow的实时视频采集和基于视频卡附带软件开发工具箱(SDK)的实时视频采集,并给出实现的核心代码。   [关键词]视频采集 VFW DirectShow SDK   中图分类号:TP391文献标识码:A 文章编号:1671-7597(2008)1110067-02      随着计算机网络和多媒体计算的迅猛发展,许多应用系统,如可视电话系统、电视会议系统、远程监控系统等要求能够实时获取视频信息;同样,若想进行图像处理也必须进行视频流捕获和单帧图像采集。因此,如何实时获取视频数据便成为应用中的重要环节和关键前提[2]。      一、基于VFW的实时视频数据采集      VFW(Video For Windows)是Microsoft推出的关于数字视频的一个软件包,该软件包能使应用程序数字化并播放从传统模拟视频源得到的视频剪辑。VFW的一个关键思想是播放时不需要专用硬件,为了解决数字视频数据量大的问题,需要对数据进行压缩。软件包引进了一种叫AVI的文件标准,该标准未规定如何对视频进行捕获,压缩仅规定视频和音频该如何存储在硬盘上,在AVI文件中交替存储视频帧和与之相匹配的音频数据。VFW给程序员提供VBX和AVICap窗口类的高级编程工具,使程序员能通过发送消息或设置属性来捕获、播放和编辑视频剪辑。Windows98以上系统都自动安装配置视频所需的组件,如设备驱动程序,视频压缩程序等[3]。   VFW主要由以下6个模块组成:   AVICAP.DLL: 处理视频捕获,为AVI文件输入输出和视频、音频设备驱动程序提供一个编程接口。   MSVIDEO.DLL: 用DrawDib函数处理屏幕上的视频操作。   MCIAVI.DRV: 包含对VFW的MCI命令的解释器。   AVIFILE.DLL: 支持由标准多媒体I/O函数提供的更高的命令来访问AVI文件。   ICM:压缩管理器,管理用于视频压缩/解压的编码器。   ACM:音频压缩管理器,管理用于波形音频压缩/解压的编解码器。   在这里介绍采用窗口类AVICap 实现视频捕获的方法。AVICap支持实时的视频流捕获和单帧捕获并提供对视频源的控制。它能直接访问视频缓冲区,不需要生成中间文件,实时性很强,效率很高[4]。同时,它也可将视频捕获到文件。视频数据的实时采集主要是通过调用AVICap32.dll创建AVICAP窗口类,由AVICAP窗口类中的消息、宏函数、结构以及回调函数来完成。VFW的视频采集功能函数主要包括捕获视频流至AVI文件(capCaptureSequence)、捕获视频流至缓存(capCaptureSequenceNoFile)、捕获视频流的具体帧至AVI文件(cap-CaptureSingleFrame)、本地预览(capPreview/capOverlay)和捕获单帧预览(capGrabFrame/cap- GrabFrameN   -oStop)等。VFW还提供了回调函数,允许应用程序精确控制视频流的捕获、检测错误、监控状态变化,以及在捕获两帧数据的空隙和每捕获新帧时对实时视频数据进行处理。具体的采集流程如图1所示。   采集的核心代码[5]:   {    HWND hWnd=capCreateCaptureWindow(“视频捕获窗口”,   WS_CHILD|WS_VISIBLE,//设置指定窗口的风格   Rect.left,Rect.top,Rect.Right-Rect.left,Rect.bottom-Rect.top,//设置显式帧窗口的大小    NULL,NULL);//创建捕获窗口并将获取的句柄赋予hWnd    //注册系统回调函数    CapSetCallbackOnError(hWnd,(FARPROC)ErrorCallbackProc;   //在采集过程中出错时被调用   CapSetCallbackOnStatus(hWnd,(FARPROC)StatusCallbackProc;   //在采集窗口发生改变时被调用   CapSetCallbackOnFrame(hWnd,(FARPROC)FrameCallbackProc);   //在每采集完一帧时调用    capDriverConnect( hWnd ,0);//窗口与驱动设备相连接    capOverlay(hWnd,TRUE);//将显示设置成Overlay模式,开始捕获视频流    capCaptureSequ

文档评论(0)

erterye + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档