windows form环境下使用opencv及directshow_第1页
windows form环境下使用opencv及directshow_第2页
windows form环境下使用opencv及directshow_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Windows Form 环境下 使用 OpenCV 及 DirectShow 因为要做一个简单的摄像头蔽障,考虑用 OpenCV 做图像处理比较方便,用 Windows Form 做 个简单的界面非常快速。就想在 Windows Form 里用 OpenCV 的函数库.我的编辑环境是 VC+2005(VC+8/VS2005)。把我的一些经验发上来希望能给别人提供一点帮助。 首先安装 OpenCV. 具体安装步骤以及 OpenCV 的下载可以去 OpenCV 中文论坛 找到,网上也 有非常多的博客和论坛有介绍。这里提醒一点,无论是否在安装时钩上了添加环境变量都要再手 动添加一次。 (是 OpenCV 的小 BUG) 。具体方法:右击我的电脑属性高级环境变量path 你 OpenCV 的安装路径下OpenCVbin. 在 VC+2005下设置 OpenCV 也不再啰嗦,去 OpenCV 中文论坛 很好找,很详细.各种 C+ 编辑环境下的都有.一步步照着来. MOST IMPORTANT 在 Win32控制台以及 MFC 下都可以直接添加 cv.h 以及 OpenCV 的其他头文件,但是在 Windows Form 似乎不可以.在论坛里也看到有人发问是不是在 Windows Form 里不能使用 OpenCV.其实是 可以的.很简单,Windows Form 默认是 “纯 MSIL 公共语言运行库支持 (/clr:pure)“要改成“公共语 言运行库支持(/clr)“.具体位置:在解决方案里,右击你的工程属性配置属性常规,然后就 能看到“公共语言运行库支持 “的配置了 . 现在就可以在 Windows Form 下使用 OpenCV 的函数库啦! 因为 OpenCV 从视频设备采集图像的函数 cvCaptureFromCAM 使用的是 vfw,采用消息机制,速 度较慢,测试发现 fps 只有 9-12左右,太慢了.使用 DirectShow 后速度可以提升到60帧/s. 首先下载 DirectX 提别提醒:别下最新版的!下 DirectX 9.0b SDK 或者 DirectX 9.0a SDK,因为 DirectX 9.0c SDK 之后的版本把 DirectShow 去掉了! 配置 DirectShow 开发环境 我当时是参考一篇博客“ LGS 的 BLOG” 设置的,里面写的很详细,在这里要向李大哥表示感 谢.我把这篇博文贴过来,供大家参考。我对原文里一个地方有异议,所以在下面修改了(红色标 注)。 以下转自 LGS 的 BLOG 首先,就是编译 baseclasses,什么是 baseclasses?打开你的 dx 的 sdk 安装目录,例如: D:DX90SDKSamplesC+DirectShow 这里就有一个叫 baseclasses 的工程,为安全起见,请先备份此工程。 1,双击 baseclasses.sln 打开,提示我们需要转换工程,按提示转换就是了,编译 提示错误: 1D:Microsoft Visual Studio 8VCPlatformSDKincludewinnt.h(222) : error C2146: syntax error : missing ; before identifier PVOID64 1D:Microsoft Visual Studio 8VCPlatformSDKincludewinnt.h(222) : error C4430: missing type specifier - int assumed. Note: C+ does not support default-int 1D:Microsoft Visual Studio 8VCPlatformSDKincludewinnt.h(5940) : error C2146: syntax error : missing ; before identifier Buffer 1D:Microsoft Visual Studio 8VCPlatformSDKincludewinnt.h(5940) : error C4430: missing type specifier - int assumed. Note: C+ does not support default-int 1D:Microsoft Visual Studio 8VCPlatformSDKincludewinnt.h(5940) : error C4430: missing type specifier - int assumed. Note: C+ does not support default-int 1d:DX90SDKSamplesC+DirectShowBaseClassesctlutil.h(278) : error C4430: missing type specifier - int assumed. Note: C+ does not support default-int 2,在 Tools-Options-Projects and solutions-vc+ directories-show directories for 里选择 include files 然后增加 D:DX90SDKInclude D:DX90SDKSamplesC+DirectShowBaseClasses D:DX90SDKSamplesC+Common 可能会问题依旧,调整一下 include files 的顺序吧,把他们都放在最上面(原文是都放在最后, 但我认为应该放在最上面) ,例如我的环境: D:DX90SDKInclude D:DX90SDKSamplesC+DirectShowBaseClasses D:DX90SDKSamplesC+Common $(VCInstallDir)include $(VCInstallDir)atlmfcinclude $(VCInstallDir)PlatformSDKinclude $(FrameworkSDKDir)include 然后在 project-BaseClasses properties-configuration-C/C+ - General-Additional Include Directories 里面的内容(.,include)删掉,重新编译,PVOID64的错误 消失,原因如下: POINTER_64是一个宏,在64位编译下起作用,它包含在 SDK 目录下的 BASETSD.H 中(Microsoft Visual Studio 8VCPlatformSDKIncludebasetsd.h(23):#define POINTER_64 _ptr64) ,但 DXSDK 自己也带了一个 basetsd.h,里面没有定义 POINTER_64,从而导致出错,只需要改变 include files 的优先级即可。当然,也可以改写 winnt.h 中的代码,在下面这两行:typedef void *PVOID; typedef void *POINTER_64 PVOID64; 之前增加一行: #define POINTER_64 _ptr64 3,到目前为止,还剩下: BaseClassesctlutil.h(278) : error C4430: missing type specifier - int assumed. Note: C+ does not support default-int 这个错误,解决方法如下: 打开 project-BaseClasses properties-configuration-C/C+ -Command Line,增加 /wd4430选项。 4,接着编译,提示 error C2065: Count : undeclared identifier 等等错误,这个是微软的 历史遗留问题了,C+标准语法的问题,因为在之前在 for 循环内定义的变量可以在 for 之外的 地方使用,即在第一个 for 里 for(int i,.),以后的 for 再使用 i 不必再声明,解决方法也 很简单,打开 project-BaseClasses properties-configuration-C/C+-Language-Force Comformance in For Loop Scrope 设置为 No 即可。当然,也可以手动改代码,增加一个声明就 是了。 经过上面几个步骤,应该是可以顺利编译了,对于其它版本的工程,照样设置就可以了,总 共编译出下面4个文件备用: BaseClassesDebugstrmbasd.lib BaseClassesDebug_Unicodestrmbasd.lib BaseClassesReleaseSTRMBASE.lib BaseClassesRelease_UnicodeSTRMBASE.lib 需要在 Tools-Options-Projects and solutions-vc+ directories-show directories for-library files 里把它们加进去。 赶快编译 DX90SDKSamplesC+DirectShowPlayersPlayDMO 工程试试看吧。 以上转自 LGS 的 BLOG. 可能会遇到的一个问题 编译头文件 WXDebug.h 时可能会报错: d:dxsdksamplesc+directshowbaseclasseswxdebug.h(334) : error C2146: syntax error : missing ; before identifier m_pString 1d:dxsdksamplesc+directshowbaseclasseswxdebug.h(331) : error C2065: m_pString : undeclared id

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论