opencv刚接触的时候,最烦心的就是安装完后随便一编译就发现一堆的错误,所有事情甚至不能从0开始。以我学习opencv的经验,将我遇到及解决的办法整理出来给大家参考。
1:安装vc6
2:安装opencv beta5 OpenCV beta5默认安装后,首先在安装目录找到cvaux.h并修改第1137行:
CvMemStorage* storage; /*storage for foreground_regions / /
为------------->
CvMemStorage* storage; /*storage for 揻oreground_regions?*/ /
否则编译aux库的时候,会出现3个编译错误,类似
error C2039: 'foreground_regions' : is not a member of 'CvFGDStatModel'
3:到OpenCV安装目录/_make下找到opencv.dsw并打开,在vc中选择build----batch build ,所有64位的都不选,然后点build。这样就生成了以后大家经常用到的一些lib及dll,包括release和debug两个版本的。
4:安装directx sdk(其实需要的是里面的DirectShow sdk)
找到<DirectXSDK安装目录>/.../..../DirectShow/BaseClasses/baseclasses.dsw并打开, 编译连接后建立 Release 和Debug 版本的库,将产生的库 (在 DirectX 9.x 中,分别叫 strmbase.lib 和 strmbasd.lib) 拷贝到目录 <DirectXSDK安装目录>/lib 下。
5:到OpenCV安装目录/_make下找到opencv_directshow.dsw并打开, 添加 <DirectXSDK安装目录>/include<DirectXSDK安装目录>/.../.../DirectShow/BaseClasses
到 includes搜索路径中 (在 Tools->Options->Directories->Include files )
然后添加 <DirectXSDK安装目录>/lib 到库搜索路径中 (在 Tools->Options->Directories->Library files )
这样才可避免编译时找不到文件streams.h ,例如cvcam工程编译时就会提示此错误。
6:建立一个vc工程,配置你自己的工程,对于vc6: project - settings -all configurations ,C/C++标签Category中选择Prepreocessor Additional include directories项,输入以“,”分开的相对路径(注意相对路径的格式与你的openCV文件夹与你的工程文件夹相对位置有关),如我的工程建立在OpenCV的目录下,则我可以这样设置相对路径: ../cvaux/include,../cxcore/include,../cv/include,../otherlibs/highgui, ../otherlibs/cvcam/include ; 当然,也可以输入绝对路径如 C:/Program Files/OpenCV/cv/include…
Link标签 Category中选择General Object/library modules, 输入以空格分开的cvd.lib highguid.lib cvauxd.lib cxcored.lib cvcamd.lib
Link标签 Category中选择Input Object/library modules, 输入以空格分开的cvd.lib highguid.lib cvauxd.lib cxcored.lib cvcamd.lib
Link标签 Category中选择Input Additional Library path, 输入包含lib库的相对路径或绝对路径,我的工程相对路径设置为 ../lib。设置完以上点击确定。
7.加入openCV的工程到你的工程里并设置依赖关系
vc6: ProjectàInsert project into workspace àcv/cv.dsp
同样加入cvaux.dsp, cxcore.dsp, highgui.dsp
ProjectàDependencies: cv选择cxcore; cvaux选择cv,cxcore; highgui选择cxcore; 你的工程选择所有
编译,应该是没问题了。
希望对大家有所帮助,也欢迎各位和我探讨有关程序上的问题。qq:41362804(tangjingli)
忘记一样,注册proxytrans.ax 和syncfilter.ax 否则使用CVCAM时会导致软件崩溃,注意注册的时候要在regsvr32的后面写“ax文件的全路径/*.ax”
*********************************************************************************************************************************************
OpenCV环境配置步骤:
首先声明:我是在WindowsXP下,使用VC++6.0 + sp6编译器,其他的版本我没有试过。
1、安装directX 9.0b sdk和OpenCV_1.0,这是我的搭配,实践过肯定可以说没问题,以后OpenCV肯定会再更新,届时有什么注意的再说。安装最好选择默认的安装目录(另选目录的话环境变量和别人的不一样,工程拷贝给别人的话可能需要调整),directX sdk要带Sample一起安装,因为其中的一些文件在配置OpenCV的时候要用到。
2、directX sdk安装完毕后进入C:/DXSDK/Samples/C++/DirectShow/BaseClasses目录,把这个工程在Debug和Release下编译后,将生成的STRMBASE.lib和strmbasd.lib复制到C:/DXSDK/Lib下面。
3、安装OpenCV后系统变量一般会自动设置,不过还是检查一下,没有的话就要在操作系统环境变量path下添加C:/Program files/OpenCV/bin; 然后到C:/Program Files/OpenCV/_make目录下,打开工程,在工具->选项->目录里的include files将C:/DXSDK/Samples/C++/DirectShow/BaseClasses加进去,然后在Debug和Release下全部编译(期间肯定会遇到下面两个问题,可以参照下文)。
4、具体开发一个OpenCV的例子程序时,要将VC的环境进行一些配置:(1)在setting里c/c++ ->preprocessor->additional include directory 增加C:/Program Files/openCV/cxcore/include,C:/Program Files/openCV/cv/include,C:/Program Files/openCV/otherlibs/highgui,C:/Program Files/openCV/cvaux/include (假设opencv默认安装)。(2)在link->input中的object/library modules增加cvd.lib cxcore.lib cv.lib cvaux.lib cvcam.lib cxcored.lib highgui.lib highguid.lib ml.lib (有的朋友说还有cvd_i7.lib cxcored_i7.lib等,我安装完后没有这些文件,也就没有写了,可能是版本的问题)。(3)在link->input中的additional libray path增加C:/Program Files/opencv/lib。
至此我们的一个OpenCV例子程序就可以编译过去了,我还没来得及用呢!大家一起进步吧!
我参考的文章链接:http://blog.csdn.net/woxincd/archive/2007/04/19/1570266.aspx
配置期间可能遇到的问题:
1、安装OpenCV过程中需要编译其_make目录下的opencv.dsw和opencv_directshow.dsw两个工作区下的所有工程,在编译opencv.dsw的cvaux files和cvtest files两个工程时都会遇到error C2039: 'foreground_regions' : is not a member of 'CvFGDStatModel'类似的编译错误,根据一位网友提供的信息,说这是OpenCV的一个古老的BUG,只要在cvaux/include文件夹下的cvaux.h文件,在文件中搜到foreground_regions所在的行,将
CvMemStorage* storage; /*storage for 揻oreground_regions?/ /
CvSeq* foreground_regions /*foreground object contours*/
中的?改为*就可以了,本来应该是一个注释,属于项目中的笔误。改过来后再去编译,就OK啦!
我参考的原文:http://hi.baidu.com/greatsea/blog/item/66dbaa1f34e36bf1e1fe0b60.html
2、在编译opencv_directshow.dsw的CalivFilter files和ProxyTrans files两个工程时会出现
fatal error C1083: 无法打开包含文件:“streams.h”: No such file or directory类似的错误,我出现这个错误时是因为没有安装DirectX,后来根据一位网友的提醒,安装了一下(据这位网友所说,必须安装directX 9.0b sdk,装directX 9.0c sdk反而不行,而且要带所有的Sample一起装,因为所需要的文件是在
C:/DXSDK/Samples/C++/DirectShow/BaseClasses目录下的streams.h文件,
这位网友的回复链接是:http://www.mvonline.com.cn/bbs/simple/index.php?t1961.html)
安装以后,错误变成了链接错误:
Creating library ../../_temp/CalibFilter_Rls/CalibFilter.lib and object ../../_temp/CalibFilter_Rls/CalibFilter.exp
CalibFilter.obj : error LNK2001: unresolved external symbol "public: __thiscall CTransInPlaceFilter::CTransInPlaceFilter(char *,struct IUnknown *,struct _GUID const &,long *,bool)" (??0CTransInPlaceFilter@@QAE@PADPAUIUnknown@@ABU_GUID@@PAJ_N@Z)../../Bin/CalibFilter.ax : fatal error LNK1120: 1 unresolved externals
原来这里不仅要用到streams.h头文件,还要用BaseClasses下这个工程生成的lib文件
解决办法是:将BaseClasses工程分别在Debug和Release下编译后,将生成的STRMBASE.lib和strmbasd.lib复制到C:/DXSDK/Lib下面,由于C:/DXSDK/Lib在安装directX SDK后就会被VC6.0自动设为包含库文件目录,所以这两个链接文件就可以找到了。
如果还有错误,就检查一下CalivFilter files和ProxyTrans files两个工程的工程->连接->Link属性页,Debug下应该有strmbasd.lib,Release下应该有STRMBASE.lib,如果正常的话应该就没有问题了。
我参考的帖子链接是:http://topic.csdn.net/t/20041223/22/3671793.html
还是CSDN牛人多,外国论坛上都解决了半天无果而终的问题,在CSDN上都有结果...:-)
最后在给两个重要网站的链接:
http://www.opencv.org.cn/index.php OpenCV中文网,学习资料数不胜数,还有旗下论坛
http://opencvlibrary.sourceforge.net/ OpenCV英文站,下载最新的开源包,了解最新技术信息