实例透析:在Delphi中开发视频捕获程序

VFW是VideoforWindows的简称,是微软公司为视频软件开发人员专门推出的关于数字视频的软件包来对视频处理进行支持。


    VFW是VideoforWindows的简称,是微软公司为视频软件开发人员专门推出的关于数字视频的软件包来对视频处理进行支持。VFW提供的接口可以支持大多数的视频采集卡,所以为视频捕捉提供了标准的接口,从而大大降低了视频软件在Windows下的开发难度。现在我们就来掌握下如何利用VFW技术外加简易摄像头实现一个简单的单路视频监控系统,实例涉及到的摄像头既可为市场上出售的普通摄像头,也可为电脑笔记本自带摄像头。

  VFW是VideoforWindows的简称,是微软公司为视频软件开发人员专门推出的关于数字视频的软件包来对视频处理进行支持。VFW提供的接口可以支持大多数的视频采集卡,所以为视频捕捉提供了标准的接口,从而大大降低了视频软件在Windows下的开发难度。现在我们就来掌握下如何利用VFW技术外加简易摄像头实现一个简单的单路视频监控系统,实例涉及到的摄像头既可为市场上出售的普通摄像头,也可为电脑笔记本自带摄像头。

    视频捕捉与实时处理技术是目前视频处理系统中难点技术之一,能否准确捕捉指定的视频图像,进而实现精确地数据分析与处理,关系到整个视频系统的成败。显然,这个系统的重要之处是实时捕捉视频图像。为此,采用VFW技术,它能使应用程序通过数字化设备从传统的模拟视频源得到数字化的视频剪辑。VFW的一个重要思想是播放时不需要专用硬件。为了解决数字视频数据量大的问题,需要对数据进行压缩,而VFW引进了AVI的文件标准。该标准未规定如何对视频进行捕捉、压缩及播放,仅规定视频和音频该如何存储在硬盘上及在AVI文件中交替存储视频帧和与之相匹配的音频数据。但VFW可使程序员通过发送消息或设置属性来捕捉、播放和编辑视频剪辑。

    VFW主要由6个模块组成,下面做一下简单的说明:

    AVICAP.DLL包含执行视频捕捉的函数,它给AVI文件的I/O处理和视频、音频设备驱动程序提供一个高级接口。

    MSVIDEO.DLL包含一套非凡的DrawDib函数,用来处理屏幕上的视频操作。

    MCIAVI.DRV包括对VFW的MCI命令解释器的驱动程序。

    AVIFILE.DLL包含由标准多媒体I/O(mmio)函数提供的更高的命令,用来访问.AVI文件。

    ICM压缩治理器,用于治理的视频压缩/解压缩的编译码器(Codec)。

    ACM音频压缩治理器,提供与ICM相似的服务,适用于波形音频。

    接下来让我们了解一下视频捕捉程序开发的过程,视频捕获是指由专用的视频采集卡捕获声频和视频信息,然后将其进行数据化处理,再经过软件的压缩进行处理,这时就可对这些数据进行保存、回放、传输等各种操作。在VFW技术中,使用AVICap窗口类来开发视频捕捉程序,AVICap类支持实时视频流捕捉和单帧捕捉,并提供对视频源的控制。AVICap窗口类能直接访问视频缓冲区,而不需要生成中间文件,因而实时性很强,效率也很高。

    开发视频捕捉程序主要分以下四个步骤:

    (1)创建一个AVICap类的捕捉窗口

    在进行视频捕捉之前必需要先创建一个“捕捉窗口”,并应以此为基础进行所有的捕捉及设置操作。“捕捉窗口”可用AVICap窗口类的“CapCreateCaptureWindow”函数来创建,其窗口风格可设置为WSCHILD和WS_VISIBLE参数,例如:

    hWndC:=CapCreateCaptureWindowA(’MyOwnCaptureWindow’,

    WS_CHILDorWS_VISIBLE,//窗口样式

    Panel1.Left,//X坐标

    Panel1.Top,//Y坐标

    panel1.Width,//窗口宽

    panel1.Height,//窗口高

    Form1.Handle,//窗口句柄

    0);//一般为0

    “捕捉窗口”类似于一个标准组件,其主要功能为:

    1.将视频流和音频流数字化,然后存储在硬盘或其他存储介质上,实现录象功能;

    2.动态的在一个捕获窗口与一个捕获设备之间连接或断接;

    3.以Overlay或Preview模式对输入的视频流进行实时显示;Overlay该模式为部分采集设备所具有的能力,可以通过CAPDRIVERVAPS结构中的fHasOverlay域来判断设备是否具备该模式。在Overlay模式下所捕获的视频数据的显示不需要占用系统资源,显示速度快,同时不影响系统的其他任务。该模式所支持的视频采集格式为YUV格式,通过capOverlay宏完成;在Preview模式下显示要占用CPU资源,视频砧由系统调用GDI函数在捕获窗口中显示。Previews模式显示速度慢,所支持的视频采集格式为RGB格式,通过capPreview宏实现。所以一般采用overlay模式显示的图像要比preview流畅;

    4.实现动态视频流截图,一帧一帧地获得视频数据。

    (2)使捕捉窗口与其设备驱动程序相关联

    单独定义的捕捉窗是不能工作的,它须与一个设备相关联才能取得视频信号,通过如下代码就可以使捕捉窗口与其设备驱动程序相关联:

    SendMessage(hWndC,WM_CAP_DRIVER_CONNECT,0,0);

    另外使用函数CapDriverConnect也可实现捕捉窗口与其设备驱动程序相关联。例如:

    CapDriverConnect(hWndC,0);

    (3)基本的捕获设置

    基本的捕获设置包括:设置捕获速度(每秒捕获多少帧),是否同时捕获声频,捕获缓冲,允许最大丢失多少帧,是否使用DOS内存,以及用键盘的哪个键或鼠标的哪个键来终止捕获等等。这些基本的设置都可以使用TcaptureParms结构来描述,你可以使用capCaptureGetSetup函数来得到当前的设置,然后改变此结构的成员变量,再使用capCaptureSetSetup函数设置新的设置,之后还可以用CapPreviewScale、CapPreviewRate设置预览的比例与速度,也可以直接使用设备的默认值。

    (4)打开预览

    利用函数CapOverlay可选择是否采用叠加模式预览,以使系统资源占用小,视频显示速度加快。然后用CapPreview启动预览功能,这时就可以在屏幕上看到来自摄像机的图像了。

    通过以上四步就可以建立一个基本的视频捕捉程序,但假如想自己处理从设备捕捉到的视频数据,则要使用捕捉窗回调函数来处理,比如一帧一帧地获得视频数据或以流的方式获得视频数据等。

实例透析:在Delphi中开发视频捕获程序

该文观点仅代表作者,本站仅提供信息存储空间服务,转载请注明出处。若需了解详细的安防行业方案,或有其它建议反馈,欢迎联系我们

(0)
小安小安

相关推荐