视频捕捉程序开发基本步骤.doc

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
视频捕捉程序开发基本步骤

2 视频捕捉程序开发的基本步骤 2.1 使用AVICap窗口类 笔者使用的是AVICap窗口类来开发视频捕捉程序。AVICap类支持实时视频流捕捉和单帧捕捉,并提供对视频源的控制。通常使用的MCI控件虽然也提供了数字视频服务。并为视频叠加提供了Overlay命令集等,但这些命令主要是基于文件的操作,还不能满足实时地从视频缓存中提取数据的要求。对于使用没有视频叠加能力的捕捉卡的PC机来说,用MCI提供的命令集是无法捕捉视频流的。而AVICap窗口类在捕捉视频方面具有一定的优势,它能直接访问视频缓冲区,而不需要生成中间文件,因而实时性很强,效率也很高。另外,它还可将数字视频捕捉到一个文件中。 2.2 开发的基本步骤 开发视频捕捉程序主要有以下四个步骤: (1)创建“捕捉窗”。 在进行视频捕捉之前必需要先创建一个“捕捉窗”,并应以此为基础进行所有的捕捉及设置操作。“捕捉窗”可用AVICap窗口类的“Cap Create Capture Window”函数来创建,其窗口风格可设置为WSCHILD和WS_VISIBLE参数。 “捕捉窗”类似于标准控件,它具有下列功能: 将视频流和音频流捕捉到一个AVI文件中; 动态地同视频和音频输入器件连接或断开; 以Overlay或Preview模式对输入的视频流进行实时显示; 在捕捉时,可指定所用的文件名,并可将捕捉文件的内容拷贝到另一个文件; 设置捕捉速率; 显示控制视频源、视频格式及视频压缩的对话框; 创建、保存或载入调色板; 将图像和相关的调色板拷贝到剪贴板; 将捕捉的单帧图像保存到DIB格式文件。 (2)关联捕捉窗和驱动程序 单独定义的捕捉窗是不能工作的,它须与一个设备相关联才能取得视频信号。用函数CapDriver Connect可使捕捉窗与其设备驱动程序相关联。 (3)设置视频设备的属性 通过设置TcaptureParms结构变量的各个成员变量,可以控制设备的采样频率、中断采样按键、状态行为。设置好TcaptureParms结构变量后,可以用函CapCaptureSetSetup使设置生效。之后还可以用CapPreviewScale、CapPreviewRate设置预览的比例与速度,也可以直接使用设备的默认值。 (4)打开预览 利用函数CapOverlay可选择是否采用叠加模式预览,以使系统资源占用小,视频显示速度加快。然后用CapPreview启动预览功能,这时就可以在屏幕上看到来自摄像机的图像了。 通过以上四步就可以建立一个基本的视频捕捉程序,但假如想自己处理从设备捕捉到的视频数据,则要使用捕捉窗回调函数来处理,比如一帧一帧地获得视频数据或以流的方式获得视频数据等。 3 基于Delphi的视频捕捉程序 根据系统对系统访问、处理速度等方面的非凡需求,笔者选用Delphi作为开发工具。下面以开发一个逐帧从视频设备上捕捉视频数据的程序为例,来说明每个函数的作用以及开发的具体过程。所给例程的功能是可以在屏幕上显示捕捉到的视频,并可以获得每一帧的图像数据。具体步骤如下: (1)新建一个工程,并将AVICAP32.PAS包含到USES中。 {PASCAL INTERFACE for AVICAP32 DLL} {Converted from microsoft Header file by ArTee} {Free to use - Im NOT responsible fo bugs} unit avicap32; interface uses Windows, Messages, SysUtils, MMSystem; ?//This part might be buggy. ?//It Assumes types because I cannot find the correct unit type ? HVIDEO = longword; //Handle; ? UINT?? = longword; ? POINT = record ??? x, y: integer ? end; ? LPPOINT = ^POINT; ? FOURCC = record ??? c1, c2, c3, c4: char; ? end; ? mmioFOURCC = FOURCC; ? LPVOID???? = Pointer; //LPWAVEHDR, LPVIDEOHDR worden gebruikt in de call-back functions! ik heb ze maar gereplaced met integers. {*************************************************************************** ?*

您可能关注的文档

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档