• 【转】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: 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填写如下图:

    CMake配置图


    然后点击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,你会看到如下图所示的运行结果:)

    delaunay运行结果图

       如果你看到上面的结果图了,恭喜你,以后你可以后用Python+OpenCV了。(注意本文中的路径请根据自己的情况确定)

    作者: pzxbc
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    java内存区域模型
    Java类加载器(双亲委派模型)(综述)
    2.无重复字符的最长子串
    浅谈Java中的对象和引用
    OSI七层协议大白话解读
    MPLS
    计算机网络为什么要分为五层结构?其依据是什么?
    前端技巧小结
    移动端尺寸新写法-rem
    编写高质量代码:Web前端开发修炼之道(四)
  • 原文地址:https://www.cnblogs.com/cslunatic/p/6074701.html
Copyright © 2020-2023  润新知