【http://youzitool.com 新博客,欢迎访问】
由于需要看Opencv中的surf算法,开始了悲催的Opencv安装配置之旅...
一、配置具体步骤
环境:windows XP+visual studio 2010+opencv 2.1(貌似windows7也可以,但没试)
说明:此部分转自网上教程,说得很详细,直接转帖过来,在此感谢作者
1、下载文件
OpenCV2.1
官方地址:http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.1/OpenCV-2.1.0-win.zip/download
推荐本论坛地址:http://www.opencv.org.cn/download/OpenCV-2.1.0-win32-vs2008.exe
CMAKE 2.8.1
http://www.cmake.org/files/v2.8/cmake-2.8.1-win32-86.exe
INTELTBB3.0
http://www.threadingbuildingblocks.org/uploads/77/151/3.0/tbb30_20100406oss_win.zip
2、首先安装CMAKE2.8.1,然后将OpenCV2.1安装到你将要放置OPENCV的地方,接着,解压INTEL TBB 3.0,比如将OPENCV和TBB都放在D:\Program Files里面。并在OpenCV文件夹下创建子目录D:\Program Files\OpenCV2.1\vs2010,用于存放编译结果。
检查D:\Program Files\OpenCV2.1\bin和D:\Intel TBB 3.0\bin\ia32\vc10是否已经被加入到环境变量(我的电脑-属性-环境变量)PATH,如果没有,请加入。加入后需要注销当前Windows用户(或重启)后重新登陆才生效。(可以在任务管理器里重启explorer.exe)
打开CMAKE 2.8.1,在Where is the source code后面填写(或者选择)OPENCV 2.1的安装目录,如D:\Program Files\OpenCV2.1,在Where to build the binaries里填写刚创建的子目录D:\Program Files\OpenCV2.1\vs2010。接着点击Configure按钮,在出现的对话框中选择Visual Studio 10,下面的选项选择Use default native compilers,点击Finish继续。
过一会儿之后会出现一个配置窗口(此处注意在CMAKE配置的时候是不能够打开VS2010的),然后勾选BUILD_SHARED_LIBS,BUILD_TESTS,OPENCV_BUILD_3DPARTY_LIBS,以及下面的WITH_JASPER,WITH_JPEG,WITH_PNG,WITH_TBB(一般这个没默认选上),和WITH_TIFF选项
勾好后再次点击Configure,之后再配置窗口最上面会出现TBB_INCLUDE_DIR-NOTFOUND字样的红色选项,此处为CMAKE找不到INTEL TBB的包含文件为之所致,将INTEL TBB 3.0里面的INCLUDE文件夹路径(注意是INCLUDE,不是INCLUDE里面的子文件夹)定位到该配置属性的路径里,再次点击Configure,在TBB_LIB_DIR处又会出现红色一行,此处为INTEL TBB的库文件位置,此处必须将路径定位到含有LIB文件的位置,比如我的安装位置是D:/Program Files/Intel TBB 3.0/lib/ia32/vc10,也就是说,在lib文件夹下会有子文件夹,必须定位到子文件夹对应的VC版本文件夹里去,这里由于是配置VS2010,所以我们选择VC10文件夹,ia32子文件夹是32位系统,此处应根据对应操作系统选择。
然后,我们再次点击Configure,此时所有红色行已经变为白色,同时在下方的信息里面会有一条为Use TBB:YES的字样,证明我们已经将INTEL TBB配置完毕,然后点击Generate。
3、完成后在刚创建的子文件夹D:\Program Files\OpenCV2.1\vs2010下会出现一个VS2010的解决方案文件OPENCV.sln,双击打开后,出现OPENCV 2.1的所有工程项目,先不要着急编译。
首先点击Solution Explorer(解决方案资源管理器)里面Property Manager(属性管理器)下的选项卡,依次展开ALL_BUILD—Debug|Win32—右键单击Microsoft.Cpp.Win32.user,选择Properties(属性),然后选择VC++ Directories(VC++目录),在Executable Directories(可执行文件目录)里面将INTEL TBB 3.0的可执行路径(bin)填写到里面,此处与LIB一样,必须定位到VC10才可以,例如我的是D:\Program Files\Intel TBB 3.0\bin\ia32\vc10,将Include Directories(包含目录)定位到Intel TBB的Include文件夹即可,无需再往深入定位,在Library Directories(库目录)里填写Intel TBB的LIB文件位置,定位到VC10文件夹。
单击确定之后,将选项卡切回到Solution Explorer(解决方案资源管理器),将编译模式切换为Debug模式,右键单击Solution OpenCV(解决方案OpenCV),选择Rebuild Solution(重新生成解决方案),编译后再右键单击INSTALL项目,选择Build(生成),之后将编译模式切换为Release,重复debug模式下的步骤。完成后在你的解决方案文件夹D:\Program Files\OpenCV2.1\vs2010里面会生成bin目录,include目录,lib目录。
然后在VS2010里切回到Property Manager(属性管理器),像上面一样展开Microsoft.Cpp.Win32.user后选择Properties(属性),最后在VC++ Directories(VC++目录)里面增加子文件夹D:\Program Files\OpenCV2.1\vs2010下的可执行文件(bin),包含文件(include\opencv),以及库文件(lib),源文件(src\cv、src\cvaux、src\cxcore、src\highgui、src\ml),确定,退出并保存更改。
检查D:\Program Files\OpenCV2.1\vs2010\bin是否已经被加入到环境变量(我的电脑-属性-环境变量)PATH,如果没有,请加入。
到此OPENCV 2.1配置完成,以后建立OPENCV项目时都需在项目里面添加依赖库,方法是在Solution Explorer(解决方案资源管理器)里面右键选择项目,选择Properties(属性),然后在Linker(链接器)里面选择Input(输入),在依赖库里添加OPENCV的LIB文件夹里的LIB文件名称即可,文件名后面有小写字母“d”的为Debug库(调试模式库),没有“d”的为Release库(发布模式库)。例如:
active(debug)[活动(debug)]里添加:cv210d.lib;cvaux210d.lib;cxcore210d.lib;highgui210d.lib;ml210d.lib,
active(release)[活动(release)]里添加:cv210.lib;cvaux210.lib;cxcore210.lib;highgui210.lib;ml210.lib
二、测试工程和对遇到问题的解决方法
1、按照步骤一配置完成后,新建一个的vc++空项目testOpencv,然后添加一个cpp源文件。这里我在opencv安装目录samples\c下找的find_obj.cpp(为surf的opencv实现),将find_obj.cpp、box_in_scene.png、box.png复制到testOpencv\testOpencv工程目录下,在项目中切换到“Solution Explorer(解决方案资源管理器)”,鼠标右击“源文件-->添加-->现有项...”添加find_obj.cpp到项目中。
2、按照步骤一最后的说明添加debug或者release下的lib,然后编译。
问题及解决方法
发现release下编译没问题,但debug下会出现“应用程序正常初始化(0xc0150002)失败”的错误提示,见下图
以下为控制台提示:
<span style="font-size:18px;">“testOpencv.exe”: 已加载“D:\testProjects\testOpencv\Debug\testOpencv.exe”,已加载符号。 “testOpencv.exe”: 已加载“C:\WINDOWS\system32\ntdll.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\kernel32.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载<span style="color:#ff0000;">“D:\Program Files\xp\OpenCV2.1\bin\cv210d.dll”,Cannot find or open the PDB file</span> LDR: LdrpWalkImportDescriptor() failed to probe D:\Program Files\xp\OpenCV2.1\bin\cv210d.dll for its manifest, ntstatus 0xc0150002 调试器:: 在进程加载过程中引发了未处理的无法继续的异常 程序“[5020] testOpencv.exe: 本机”已退出,返回值为 -1072365566 (0xc0150002)。</span>
这个困扰了很久很久...在快崩溃的时候终于发现了解决方法!
看看上面错误提示加红的行(“D:\Program Files\xp\OpenCV2.1\bin\cv210d.dll”,Cannot find or open the PDB file),这是因为opencv中的dll文件的原因。
解决方法
将opencv2.1/bin下的cv210d.dll cxcore210d.dll highgui210d.dll用opencv/vs2010/bin下相应的dll替换掉。debug可以运行了!
但还是出现如下(Cannot find or open the PDB file)的问题,虽然暂时没发现有什么问题,希望大牛们多多指教,将以下问题解决。谢谢
以下是我的控制台输出:
<span style="font-size:18px;">“testOpencv.exe”: 已加载“D:\testProjects\testOpencv\Debug\testOpencv.exe”,已加载符号。 “testOpencv.exe”: 已加载“C:\WINDOWS\system32\ntdll.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\kernel32.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“D:\Program Files\xp\OpenCV2.1\bin\cv210d.dll”,已加载符号。 “testOpencv.exe”: 已加载“D:\Program Files\xp\OpenCV2.1\bin\cxcore210d.dll”,已加载符号。 “testOpencv.exe”: 已加载“C:\WINDOWS\system32\msvcp100d.dll”,已加载符号。 “testOpencv.exe”: 已加载“C:\WINDOWS\system32\msvcr100d.dll”,已加载符号。 “testOpencv.exe”: 已加载“D:\Program Files\xp\Intel TBB 3.0\bin\ia32\vc10\tbb_debug.dll”,已加载符号。 “testOpencv.exe”: 已加载“D:\Program Files\xp\OpenCV2.1\bin\highgui210d.dll”,已加载符号。 “testOpencv.exe”: 已加载“C:\WINDOWS\system32\user32.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\gdi32.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\ole32.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\advapi32.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\rpcrt4.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\secur32.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\msvcrt.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\comctl32.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\avifil32.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\winmm.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\msacm32.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\msvfw32.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\shell32.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\shlwapi.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\avicap32.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\version.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\olepro32.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\oleaut32.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\imm32.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\lpk.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\usp10.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202\comctl32.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\uxtheme.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“D:\Program Files\360\360Safe\safemon\safemon.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\msvcp60.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\wininet.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\normaliz.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\urlmon.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\iertutil.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\psapi.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\ws2_32.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\ws2help.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\MSCTF.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\MSCTFIME.IME”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\SogouPY.ime”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\msimg32.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“D:\Program Files\SogouInput\6.0.0.6236\Resource.dll”,未使用调试信息生成二进制文件。 “testOpencv.exe”: 已加载“C:\WINDOWS\system32\BtMmHook.dll”,未使用调试信息生成二进制文件。 BTMMHOOK 10.10.2011 11:24:19 Thread<0D10> Hook DLL loaded “testOpencv.exe”: 已加载“C:\WINDOWS\system32\ntmarta.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\samlib.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“C:\WINDOWS\system32\wldap32.dll”,Cannot find or open the PDB file “testOpencv.exe”: 已加载“D:\Program Files\xp\Intel TBB 3.0\bin\ia32\vc10\tbbmalloc_debug.dll”,已加载符号。 线程 'Win32 线程' (0xd10) 已退出,返回值为 -1073741510 (0xc000013a)。 线程 'Win32 线程' (0xbc) 已退出,返回值为 -1073741510 (0xc000013a)。 BTMMHOOK 10.10.2011 11:24:22 Thread<16EC> Hook DLL unloaded 线程 'Win32 线程' (0x678) 已退出,返回值为 -1073741510 (0xc000013a)。 线程 'Win32 线程' (0x768) 已退出,返回值为 -1073741510 (0xc000013a)。 线程 'Win32 线程' (0x844) 已退出,返回值为 -1073741510 (0xc000013a)。 程序“[4152] testOpencv.exe: 本机”已退出,返回值为 -1073741510 (0xc000013a)。 </span>