基于DirectShow视频及图片捕获软件的开发

我们知道目前很多工业相机的图像数据采集都是基于DirectShow的,常见的有映美精等。DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布。DirectShow多媒体流的捕捉和回放提供了强有力的支持。运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。它广泛地支持各种媒体格式,包括AsfMpegAviDvMp3Wave等等,使得多媒体数据的回放变得轻而易举。另外,DirectShow还集成了DirectX其它部分(比如DirectDrawDirectSound)的技术,直接支持DVD的播放,视频的非线性编辑,以及与数字摄像机的数据交换。更值得一提的是,DirectShow提供的是一种开放式的开发环境,我们可以根据自己的需要定制自己的组件。
笔者使用visual studio 2005 来开发了基于DirectShow的视频捕获软件,并用开发的软件对映美精相机进行了测试。本软件不但可以实现对相机的视频捕获,而且还可以抓取图像帧。软件运行时自动搜索所连接的相机,预览后可以对相机参数进行设置。下面是软件的主界面。
  预览视频后可以对视频格式和图像参数进行设置。开始预览时,捕获的视频是黑白的,我们将颜空间设置为UYVY即可捕获彩视频。
下面是捕获的一帧图像,图像质量虽然没有映美精自带的软件效果好,但已经实现了所需各项基本功能,接下来的工作将会进一步提高软件性能。
 
另外我们还可以捕获视频,点击“捕获视频”按钮,输入要保持的文件名,注意要以.avi后缀结尾,点确定就开始捕获视频。
从我们开发的软件可以看到,映美精的相机能够很好的支持DirectShow的驱动,我们的软件对映美精相机的识别是如此的容易。接下来我们将继续开发基于其它驱动的图像捕获软件,为最终实现在一个软件中识别各种相机而努力。我们将逐步开放我们的源代码,以便更多的同行一起来探讨相机的图像采集技术。
下面是详细的软件开发过程。
一、安装DirectShowvisual 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
流媒体开发用到的库,DebugDebug_Unicode版本
流媒体开发用到的库,ReleaseRelease_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++的开发环境进行配置。添加库或路径的时候,根据你的要求添加DebugReleaseDebug_UnicodeRelease_Unicode版本的库所在路径。下面假定添加非Unicode版本的库或路径。
首先确定VC2005是否已经包含了库和头文件所在的路径,因为在安装VC2005时,它会自动添加该目录。如果没有,则需要用户手工添加。
1.      聚丙烯吸收塔更改添加的include内容:
D:\DXSDK\Include
D:\DXSDK\Samples\C++\DirectShow\BaseClasses
D:\DXSDK\Samples\C++\Common\Include
添加过程如下。选择“工具”→“选项”命令,在“项目和解决方案下”选择“VC++目录”,在下拉
框中选择“包含文件”选项,将上面的三个Include内容添加进去。
2.      更改添加lib路径
要添加的lib红外线测速仪内容:
D:\DXSDK\Lib
D:\DXSDK\ Samples\C++\DirectShow\BaseClasses\Debug
D:\DXSDK\ Samples\C++\DirectShow\BaseClasses\Debug_Unicode
D:\DXSDK\ Samples\C++\DirectShow\BaseClasses\Release
D:\DXSDK\ Samples\C++\DirectShow\BaseClasses\Release_Unicode
添加过程和Include内容相似,只是在下拉框中选择“库文件”选项。
3.      添加链接库支持
上面的设置是在VC2005的开发环境的目录(Directories)中,添加用户在开发中可能用到的库或头文件“路径”,需要明确的事文件夹,而不是具体的文件。所以,要使用相关的库支持,还要用户明确地把要使用的库包含、添加到开发环境中。

本文发布于:2024-09-23 04:25:50,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/251377.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:开发   软件   添加   捕获   需要   视频
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议