DirectShow视频采集和OpenCV

本文介绍了如何使用DirectShow进行高效视频采集,对比了OpenCV的cvCaptureFromCAM方法,指出DirectShow能提供更高的帧率。通过详细步骤,解释了如何在Visual Studio 2005中配置DirectShow SDK,包括编译BaseClasses工程和设置库及路径。此外,还展示了如何使用ICaptureGraphBuilder2接口实现视频预览和捕获,以及保存为AVI和BMP格式。
摘要由CSDN通过智能技术生成
首先说下OpenCV和DirectShow:

OpenCV是Intel开源计算机视觉库。它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。

DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布。DirectShow多媒体流的捕捉和回放提供了强有力的支持。运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。它广泛地支持各种媒体格式,包括AsfMpegAviDvMp3Wave等等,使得多媒体数据的回放变得轻而易举。另外,DirectShow还集成了DirectX其它部分(比如DirectDrawDirectSound)的技术,直接支持DVD的播放,视频的非线性编辑,以及与数字摄像机的数据交换。更值得一提的是,DirectShow提供的是一种开放式的开发环境,我们可以根据自己的需要定制自己的组件。

opencv的cvCaptureFromCAM 使用的是vfw,采用消息机制,也可以进行视频采集,但是速度较慢,测试发现fps只有 9-12左右,太慢了;发现经过使用directshow后速度提升到60帧/s.而且VFW支持的视频格式相对比较少。所以通常情况下都要先用DirectShow的WDM驱动的采集卡采集到视频后,使用cvInitImageHeader()或者cvCreateImage()函数创建iplimage的句柄,然后交给OpenCV进行处理。cvInitImageHeader( IplImage* image, CvSize size, int depth,int channels, int origin CV_DEFAULT(0),int align CV_DEFAULT(4))需要的参数比较‍多,而( CvSize size, int depth, int channels )需要的参数比较少,根据情况自己选择吧。

‍一、安装DirectShowvisual studio 2005

首先我们安装DirectShow SDK,它有许多版本,作者使用的是2003年发布的dx90bsdk.exe,安装在D盘的DXSDK下。软件下载地址为http://download.microsoft.com/download/b/6/a/b6ab32f3-39e8-4096-9445-d38e6675de85/dx90bsdk.exe  http://www.microsoft.com/en-us/download/details.aspx?id=17919

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

二、开发环境配置

开发环境的配置主要有两个工作要做:一是在使用Directshow SDK开发自己的程序时需要的DirectShow的有关静态库的配置,二是visual C++开发环境的配置。

1生成DirectShow SDK开发库

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

 库名

 功能说明

 Strmiids.lib

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

Strmbasd.lib

流媒体开发用到的库,DebugDebug_Unicode版本

Strmbase.lib

流媒体开发用到的库,ReleaseRelease_Unicode版本

Quartz.lib

定义了导出函数AMGetErrorText

Winmm.lib

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

 

基于VC++2005开发软件使用DirectShow SDK,首先需要用户编译DirectShow自带的源代码工程baseclasses,以生成DirectShow SDK的不同版本的库。同时由于DirectShow SDK是早期的VC开发软件,所以使用VC++2005编译DirectShow SDK会出现很多编译问题。下面列出了详细的编译过程和问题分析、解决方法。

 

1.1 编译工程baseclasses工程

启动VS2005,选择“文件”→“打开”→“项目/解决方案”命令,在弹出的对话框中打开“BaseClasses”项目。

打开“baseclasses.sln”项目。如果VS2005有提问,则默认同意或确定。现在就开始编译该项目。按“F7”快捷键可以编译生成项目。初次编译VS2005会报很多错误或者警告,有的需要我们手工修改程序,或者修改VS2005环境配置或编译选项;有的是一类问题,解决方法也有很多种。具体解决方法请参考路锦正的Visual C++音频/视频处理技术及工程实践》第225-229页。

 

1.2 Visual C++开发环境配置

有了DirectShow SDK库,用户就可以使用这些库来开发自己的程序了。为了能让VC++自动搜寻到SDK库和头文件,还需要对VC++的开发环境进行配置。添加库或路径的时候,根据你的要求添加DebugReleaseDebug_UnicodeRelease_Unicode版本的库所在路径。下面假定添加非Unicode

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值