【转】Windows下使用VS2008编译OpenCV 2.1 添加Intel TBB和Python支持
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:\tbb40_233oss\include,Lib文件路径:D:\tbb40_233oss\lib\ia32\vc9和Bin文件路径:D:\tbb40_233oss\bin\ia32\vc9添加到系统环境变量中去。(注意自己对应的平台和版本,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:\Python27\libs\python27.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:\Python27\libs\目录下,将python27_d.dll放入C:\Windows\System32路径下。然后修改项目属性中的附加依赖项:D:\Python27\libs\python27.lib为D:\Python27\libs\python27_d.lib。(建议自己编译python的Debug库或者使用第一种方法,因为可能因为平台或者Python版本的原因,上面所提供的库不能正常使用,出现mismatch等错误情况)
6.添加生成的cv.pyd文件的路径(D:\OpenCV2.1\lib\Release或者D:\OpenCV2.1\lib\Debug,具体看你需要使用的版本)到python的库路径中。
7.测试,打开CMD(命令行),在D:\OpenCV2.1\samples\python路径下运行:python delaunay.py,你会看到如下图所示的运行结果:)

如果你看到上面的结果图了,恭喜你,以后你可以后用Python+OpenCV了。(注意本文中的路径请根据自己的情况确定)
【转】Windows下使用VS2008编译OpenCV 2.1 添加Intel TBB和Python支持的更多相关文章
- windows下用vs2008和boost结合编译程序
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://co63oc.blog.51cto.com/904636/504469 win ...
- Ubuntu 16.04下为Android编译OpenCV 3.2.0 Manager
http://johnhany.net/2016/07/build-opencv-manager-for-android-on-ubuntu/ 最近想在Android上尝试一下SIFT和SURF匹配算 ...
- 手把手教你在Windows下使用MinGW编译libav(参考libx264的编入)
转自:http://www.th7.cn/Program/cp/201407/242762.shtml 手把手教你在Windows下使用MinGW编译libav libav是在Linux下使用纯c语言 ...
- 实践详细篇-Windows下使用VS2015编译的Caffe训练mnist数据集
上一篇记录的是学习caffe前的环境准备以及如何创建好自己需要的caffe版本.这一篇记录的是如何使用编译好的caffe做训练mnist数据集,步骤编号延用上一篇 <实践详细篇-Windows下 ...
- windows下用vs2010编译ffmpeg
转载自;http://q1q2q3q4q5q6ln.blog.163.com/blog/static/500794332014666536283/ (注意:请务必先阅读:七,后记补充:) ffmpeg ...
- Windows下从源代码编译Skia
在PPAPI里面画图,能够结合第三方的图形库.比方Cairo.Skia. Google Chrome.Chromium和Android都使用Skia作为画图引擎.我也来试试Skia,先过编译关. fo ...
- vs2008编译opencv,不能copy CMakeVSMacros2.vsmacros
由于学习opencv,要查看源码文件,所以要先对opencv进行编译,可悲的是出错了 “不能copy CMakeVSMacros2.vsmacros” 通过上网查找资料,之所以出现这种情况,是因为 ...
- OpenCV - Windows(win10)编译opencv + opencv_contrib
在之前的几篇文章中,我提到了在Android.Linux中编译opencv + opencv_contrib,这篇文章主要讲在Windows中编译opencv + opencv_contrib. 首先 ...
- Windows 下使用 GNUstep 编译并运行 Objective-C 程序
今晚上开始看<Objective-C 程序设计(第4版)>这本书(OSChina 正在做此书的书评活动,详情请看这里),到现在为止看到第 7 章,于是想动手试试写两简单的程序编译跑跑看. ...
随机推荐
- 【网络流#3】hdu 1532 - Dinic模板题
输入为m,n表示m条边,n个结点 记下来m行,每行三个数,x,y,c表示x到y的边流量最大为c 这道题的模板来自于网络 http://blog.csdn.net/sprintfwater/articl ...
- 常用html元素的取值和赋值方法总结
1.获得type类型为TEXT或者AREATEXT的值 var textval = $("#text_id").attr("value"); var textv ...
- python 整型--《Python 3程序开发指南》笔记
参考:<Python 3程序开发指南> 整数转换函数: bin(i) 返回整数i的二进制表示(字符串) hex(i) 返回i的十六进制表示(字符串) int(x) 将x转换为整数,失败产生 ...
- 话付通SDK 聚合支付
步骤 官网:http://www.71pay.cn/ 1.导入Jar包----将HeepayPlugin.jar,HftJuhePay.jar 包放入工程指定的libs目录. 2.配置清单文件---- ...
- css06背景图片
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- CSS3 target 伪类不得不说那些事儿(纯CSS实现tab切换)
是不是觉得target有点眼熟?! 今天要讲的不是HTML的<a>标签里面有个target属性. target伪类是css3的新属性. 说到伪类,对css属性的人肯定都知道:hover.: ...
- python代码合并
http://www.baidu.com/s?wd=python%E4%BB%A3%E7%A0%81%E5%90%88%E5%B9%B6&rsv_bp=0&ch=&tn=mon ...
- php锁表
用PHP实现mysql锁表 mysql锁表,是利用相关的SQL语句 //执行SQL语句 锁掉userinfo表 $sql = "LOCK TABLES userinfo WRITE" ...
- 您为这个网络适配器输入的IP地址xxx.xxx.xxx.xx已经分配给另一个适配器xxx...
您为这个网络适配器输入的IP地址xxx.xxx.xxx.xx已经分配给另一个适配器‘xxx NIC’.... 2008年11月03日 星期一 08:51 问题现象: 在网卡的TCP/IP属性中无法 ...
- gc内存回收机制
判断哪些对象可回收 GC是通过对象是否存活来决定是否进行回收,判断对象是否存活主要有两种算法:引用计数算法.可达性分析算法 引用计数算法 引用计数的算法原理是给对象添加一个引用计数器,每被引用一次计数 ...