2024年3月29日发(作者:)

我们知道目前很多工业相机的图像数据采集都是基于DirectShow的,常见

的有映美精等。

DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,

与DirectX开发包一起发布。DirectShow为多媒体流的捕捉和回放提供了强有力的支持。运用

DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理

乃至存储到文件中。它广泛地支持各种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等等,使得

多媒体数据的回放变得轻而易举。另外,DirectShow还集成了DirectX其它部分(比如DirectDraw、

DirectSound)的技术,直接支持DVD的播放,视频的非线性编辑,以及与数字摄像机的数据交换。

更值得一提的是,DirectShow提供的是一种开放式的开发环境,我们可以根据自己的需要定制自己

的组件。

笔者使用visual studio 2005 来开发了基于DirectShow的视频捕获软件,并用开发的软件对

映美精相机进行了测试

。本软件不但可以实现对相机的视频捕获,而且还可以抓取图

像帧。软件运行时自动搜索所连接的相机,预览后可以对相机参数进行设置。下

面是软件的主界面。

预览视频后可以对视频格式和图像参数进行设置。开始预览时,捕获的视

频是黑白的,我们将颜色空间设置为UYVY即可捕获彩色视频。

下面是捕获的一帧图像,图像质量虽然没有映美精自带的软件效果好,但已

经实现了所需各项基本功能,接下来的工作将会进一步提高软件性能。

另外我们还可以捕获视频,点击“捕获视频”按钮,输入要保持的文件名,

注意要以.avi后缀结尾,点确定就开始捕获视频。

从我们开发的软件可以看到,映美精的相机能够很好的支持DirectShow的

驱动,我们的软件对映美精相机的识别是如此的容易。接下来我们将继续开发基

于其它驱动的图像捕获软件,为最终实现在一个软件中识别各种相机而努力。我

们将逐步开放我们的源代码,以便更多的同行一起来探讨相机的图像采集技术。

下面是详细的软件开发过程。

一、

安装

DirectShow和visual studio 2005

首先我们安装DirectShow SDK,它有许多版本,作者使用的是2003年发布

的,安装在D盘的DXSDK下。软件下载地址为。

然后安装好visual studio 2005。安装完以后我们将进行开发环境的配置。

二、开发环境配置

开发环境的配置主要有两个工作要做:一是在使用Directshow SDK开发自

己的程序时需要的DirectShow的有关静态库的配置,二是visual C++开发环境

的配置。

1、

生成DirectShow SDK开发库

使用DirectShow SDK开发用户自己的程序需要几个静态链接库:、、和。中间两个lib需要用户自己编译生成,而其他两个微软已经提供。下表列出了

使用DirectShow SDK开发程序所有要使用的库。

库名

功能说明

定义了DirectShow标准的输出类标识(CLSID)和接口标识(IID)

流媒体开发用到的库,Debug、Debug_Unicode版本

流媒体开发用到的库,Release、Release_Unicode版本

定义了导出函数AMGetErrorText

使用Windows多媒体编程用到的库

基于VC++2005开发软件使用DirectShow SDK,首先需要用户编译DirectShow自带的源代码工程baseclasses,以生成DirectShow SDK的不同版本的库。

同时由于DirectShow SDK是早期的VC开发软件,所以使用VC++2005编译DirectShow SDK会出现很多编译问题。下面列出了详细的编译过程和问题分

析、解决方法。

编译工程baseclasses工程

启动VS2005,选择“文件”→“打开”→“项目/解决方案”命令,在弹出

的对话框中打开“BaseClasses”项目。

打开“”项目。如果VS2005有提问,则默认同意或确定。现在就开始编译

该项目。按“F7”快捷键可以编译生成项目。初次编译VS2005会报很多错误或

者警告,有的需要我们手工修改程序,或者修改VS2005环境配置或编译选项;

有的是一类问题,解决方法也有很多种。具体解决方法请参考路锦正的

Visual

C++音频/视频处理技术及工程实践》第225页-229页。

Visual C++开发环境配置

有了DirectShow SDK库,用户就可以使用这些库来开发自己的程序了。为

了能让VC++自动搜寻到SDK库和头文件,还需要对VC++的开发环境进行配置。

添加库或路径的时候,根据你的要求添加Debug、Release、Debug_Unicode、

Release_Unicode版本的库所在路径。下面假定添加非Unicode版本的库或路径。

首先确定VC2005是否已经包含了库和头文件所在的路径,因为在安装VC2005

时,它会自动添加该目录。如果没有,则需要用户手工添加。