关闭

DirectShow采集视频图像,开发环境的搭建,amcap编译运行

1503人阅读 评论(1) 收藏 举报
分类:

DirectShow采集视频图像,开发环境的搭建,amcap编译运行

实验室要采集USB摄像头数据并显示,下面介绍这两天学习的两种方法。

  • 使用VFW(video 4 windows)类库采集视频
    VFW采集视频数据很简单,有大量的API接口调用即可,在实际操作过程中,发现VFW对Win7/Win8支持相当差,接几个USB摄像头后,capDriverConnect()连接失败,虽然网上给了一些解决方法,但都不靠谱,微软论坛找了半天,也没发现根源,故放弃使用此方法。

  • 使用DirectShow组件来采集视频
    DirectShow是微软开发的的组件,之前和DirectX集成在一起,后来从DirectX中移除,包含Microsoft Windows SDK中,从官网上找了很多资料,下载了半天,也没找到DirectShow,后来干脆从网上下了一个DirectShow压缩包来用。下面具体记录一下怎样编译运行DirectShow中的例子amcap。

    1. 先解压DirectShow SDK到任意目录,此SDK中包含了示例Amcap源码,但并未完全包含我们所需要的库,还需编译BaseClasses工程,才能生成我们需要的基本库baseclasses。
    2. 在VS2013中导入并编译 DirectShow SDK 安装路径下\ Samples\C++\DirectShow\BaseClasses 工程,可以编译为debug版本,也可以编译release 版本。编译成功后在\Samples\C++\DirectShow\BaceClasses\Debug_Unicode\目录下将产
      生相应的库。
    3. 在VS2013中导入Amcap源码,右键点击工程选择 “属性–>配置属性–>VC++目录”
      中进行操作:
      *在包含目录中添加
      DirectShow\Include;
      DirectShow\Samples\C++\DirectShow\BaseClasses;
      *在库目录中添加
      DirectShow\Lib;
      DirectShow\Samples\C++\DirectShow\BaseClasses\Debug_Unicode;
      在“配置属性–>链接器目录”中进行操作:
      *在附加库目录中添加
      DirectShow\Samples\C++\DirectShow\BaseClasses\Debug_Unicode;
      DirectShow\Lib;
      点击工程“右键–>清理–>生成”,将生成exe可执行文件,即可调试。
  • 在实际的操作过程中可能会遇到一些错误:

  • C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include\atlcore.h(35): fatal error C1189: #error : This file requires _WIN32_WINNT to be #defined at least to 0x0403. Value 0x0501 or higher is recommended.
    ->网上有很多解决方法,修改stdafx.h等,试了一下不行。最后的解决方案是修改预编译处理。鼠标右键项目属性->配置属性->C/C++->预处理器-> 原本是:

_WINDOWS
WINVER=0x0400
DEBUG
WIN32
_DEBUG
_WIN32_WINNT=0x0400

修改为:

_WINDOWS
WINVER=0x0501
DEBUG
WIN32
_DEBUG
_WIN32_WINNT=0x0501

确定,重新编译。

  • LINK : fatal error LNK1104: 无法打开文件“atlsd.lib”
    ->使用VS2013及以上版本会出现此现象,原因是atlsd.lib这个库文件已经移除了,因为我电脑上同时装了VS2012,看里面有这个库文件,所以将VS2013里面的工具集改为VS2012。项目属性->配置属性->常规->平台工具集->visual studio 2012 重新编译OK。

  • strmbasd.lib(dllentry.obj) : error LNK2001: unresolved external symbol “class CFactoryTemplate * g_Templates” (?g_Templates@@3PAVCFactoryTemplate@@A)strmbasd.lib(dllsetup.obj) : error LNK2001: unresolved external symbol “int g_cTemplates” (?g_cTemplates@@3HA)
    ->打开BaseClasses工程,增加”FILTER_DLL” 定义 ,项目属性->配置属性->C/C++->预处理器->预处理器定义 -> FILTER_DLL 。然后再修改BaseClasses项目代码,sysclock.cpp做如下修改:

CFactoryTemplate g_Templates[1] = {
    //{&CLSID_SystemClock, CSystemClock::CreateInstance}
    { L"SystemClock", &CLSID_SystemClock, CSystemClock::CreateInstance}
};

重新编译BaseClasses项目,产生新的strmbasd.lib文件,要看好amcap项目lib目录,需要修改amcap项目lib目录里的strmbasd.lib,之后重新编译amcap项目。

我在实验过程中仅遇到这3个问题,解决后amcap跑起来了,后面进行amcap代码学习阶段。

AMCap源码:http://download.csdn.net/detail/buynow123/9289189

0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:19843次
    • 积分:329
    • 等级:
    • 排名:千里之外
    • 原创:12篇
    • 转载:9篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论