Windows下使用VS2008编译OpenCV2.1 添加Intel TBB和Python支持
步骤:
1.仔细阅读OpenCV官网上的InstallGuide:http://opencv.willowgarage.com/wiki/InstallGuide
2.在“2) Install Prerequisite Libraries and Tools”中提到了如果想支持Python调用需要Python 2.6或者 2.7版本,而且还需要NumPy和SciPy库。升级Python至2.7的方法请参考“Windows下升级Python 2.5到Python 2.7”一文。NumPy和SciPy的下载地址:http://www.scipy.org/Download,安装指导:http://www.scipy.org/Installing_SciPy/Windows。对于已经安装好了Python的用户来说,直接下载对应Python版本的二进制安装包安装即可。
3.如果需要Intel TBB支持的话,去Intel TBB主页下载TBB(注意选择Windows版本的)。下载完之后解压到某个目录下(不需要安装,假设路径为D盘根目录),然后将头文件路径:D: bb40_233ossinclude,Lib文件路径:D: bb40_233osslibia32vc9和Bin文件路径:D: bb40_233ossinia32vc9添加到系统环境变量中去。(注意自己对应的平台和版本,64位的请选择intel64,VS2005->VC8,VS2010->VC10)
4.打开CMake GUI(我使用的版本是CMake2.8),Where is the source code 和 Where to build binaries填写如下图:
然后点击Configure按钮,选择VS2008 VC9编译器,CMake会产生一个基本的配置,不会为你勾选上WITH_TBB,所以你要自己在中间的列表窗口咋红找到WITH_TBB选项,然后勾选上。如果你还想要生成一些其他项目的配置文件,比如OpenCV提供的例子,那么你也需要自己勾选上相应的选项。最后点击Generate按钮,就会为你产生VS2008对应的项目文件。如果一切顺利,下面文本框中的输出如下:
General configuration for opencv 2.1.0 =====================================
Built as dynamic libs?: ON
Compiler:
C++ flags (Release): /DWIN32 /D_WINDOWS /W4 /Zm1000 /EHsc- /GR /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /MD /O2 /Ob2 /D NDEBUG /Zi
C++ flags (Debug): /DWIN32 /D_WINDOWS /W4 /Zm1000 /EHsc- /GR /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /D_DEBUG /MDd /Zi /Ob0 /Od /RTC1
Linker flags (Release): /STACK:10000000 /machine:X86 /INCREMENTAL:NO /debug
Linker flags (Debug): /STACK:10000000 /machine:X86 /debug /INCREMENTAL:YES
Image I/O:
JPEG: build
PNG: build
TIFF: build
JPEG 2000: build
Interfaces:
Old Python: 0
Python: ON
Python interpreter: D:/Python27/python.exe
Python numpy: 1
Use IPP: NO
Use TBB: YES
Build Documentation 0
Install path: D:/OpenCV2.1
cvconfig.h is in: D:/OpenCV2.1
-----------------------------------------------------------------
Configuring done
注意,如果以前使用过CMake编译过OpenCV,请先点击File菜单下的Delete Cache ,删除缓存文件,以免配置得不到更新。我在安装过程中就遇到了明明已经修改了Python的路径为2.7的路径,但是Configure产生的结果还是指向了原有Python2.5的路径的问题。
5.打开VS2008,然后打开刚才生成的OpenCV.sln解决方案文件(在Where to build binaries路径下),分别生成Debug和Release版本。
注意: 在生成CvPy项目的Debug版本过程中,会提示找不到Python27_d.lib导入库。查看cvPy项目属性的链接器->输入->附加依赖项,我们会发现所填写的导入库为D:Python27libspython27.lib(路径可能不同)。也就是说CMake已经知道我们所下的Python2.7安装包中没有提供Python27.lib的Debug版本,所以为我们选择了Python27.lib的Release版本(注意生成Debug版本的过程中可以链接第三方的Release版本库,只是对应的库就没有提供调试信息了),为什么还会出现找不到Python27_d.lib的错误呢?原因在于cvPy项目的源文件cv.cpp包含了Python.h文件,而Python.h文件又包含了pyconfig.h文件,在pyconfig.h文件中有一段专门针对VS平台的导入库选择代码:
/* For an MSVC DLL, we can nominate the .lib files used by extensions */
#ifdef MS_COREDLL
# ifndef Py_BUILD_CORE /* not building the core - must be an ext */
# if defined(_MSC_VER)
/* So MSVC users need not specify the .lib file in
their Makefile (other compilers are generally
taken care of by distutils.) */
# ifdef _DEBUG
# pragma comment(lib,"python27_d.lib")
# else
# pragma comment(lib,"python27.lib")
# endif /* _DEBUG */
# endif /* _MSC_VER */
# endif /* Py_BUILD_CORE */
#endif /* MS_COREDLL */
所以在你生成Debug版本的过程中,链接器会去寻找python27_d.lib文件。
解决的办法:
1)修改pyconfig.h文件,将 pragma comment(lib,"python27_d.lib")改成pragma comment(lib,"python27.lib")
2)下载python27_d.lib和python27_d.dll文件。将python27_d.lib文件放入D:Python27libs目录下,将python27_d.dll放入C:WindowsSystem32路径下。然后修改项目属性中的附加依赖项:D:Python27libspython27.lib为D:Python27libspython27_d.lib。(建议自己编译python的Debug库或者使用第一种方法,因为可能因为平台或者Python版本的原因,上面所提供的库不能正常使用,出现mismatch等错误情况)
6.添加生成的cv.pyd文件的路径(D:OpenCV2.1libRelease或者D:OpenCV2.1libDebug,具体看你需要使用的版本)到python的库路径中。
7.测试,打开CMD(命令行),在D:OpenCV2.1samplespython路径下运行:python delaunay.py,你会看到如下图所示的运行结果:)
如果你看到上面的结果图了,恭喜你,以后你可以后用Python+OpenCV了。(注意本文中的路径请根据自己的情况确定)