在windows 7下配置opencv 2.4.3的开发环境

时间:2020-11-28 03:35:36

环境

操作系统:Windows 7 旗舰版 32-bit (6.1, Build 7601) Service Pack 1

opencv版本:version 2.4.3

C++:Microsoft Visual C++ 2010 Express

过程

可以有两种方式安装opencv开发库:第一种,使用预编译的库(.exe格式)直接安装;第二种,从git上获取最新的源代码,然后自己编译。

Solution 1:使用预编译的库

从下面的网站中下载需要的opencv版本,这里是opencv 2.4.3(这一版本好像没有提供预编译的库):

http://sourceforge.net/projects/opencvlibrary/files/opencv-win/

下载得到的OpenCV-2.4.3.exe,其实是一个打包的文件,运行之后得到一个3.10G大小的文件夹,名为opencv,如图:

在windows 7下配置opencv 2.4.3的开发环境

这里好像是需要自已进行编译的,所以还是采用第二种方法。

Solution 2:本地编译

step 1:安装必要的软件和第三方库

  • 安装Microsoft Visual Studio ,当然可以采用其它的IDE开发工具,这里我使用的是 Microsoft Visual C++ 2010 Express
  • 安装CMake,用于从opencv的源代码中,产生相应的项目文件——用于编译产生必要的库,我使用的是cmake-2.8.10.2-win32-x86.exe
  • opencv源代码,有两种方式获得(推荐第二种方式)(第一种方式获得440M左右的源代码,第二种方式则有3.10G左右包括了预编译的库等):

              在windows 7下配置opencv 2.4.3的开发环境

上面三项内容已足以开始opencv的编译安装,但是还有一些第三方的工具,推荐安装。

  • python库,提供opencv中python的API, 我使用2.7.3版本
    • 安装python扩展安装工具Setuptools(用于安装sphinx),貌似只支持到python2.7版本
    • 安装Sphinx(python文档生成工具,用于创建opencv文档)
      • 打开powershell (或者cmd)
      • 执行:cd D:\Develop\Python27\Scripts
      • 再执行:.\easy_install.exe sphinx,就好了
  • Numpy,python的科学计算包 。下载并安装即可。我使用的是numpy-1.7.0rc1-win32-superpack-python2.7.exe,它会自动检测python的安装目录
  • Miktex,tex文档编辑生成工具,用于生成pdf格式的opencv文档,我使用的是basic-miktex-2.9.4521.exe,它会根据需要自动下载相应的宏包。
  • Intel © Threading Building Blocks (TBB),opencv中的一些并行代码可以使用TBB来进行加速,不装也无所谓,装上则运算效果更好一些。我使用的是4.1 update 1 ,将其解压放入一个文件夹即可,如,D:\Develop\TBB
  • Intel © Integrated Performance Primitives ( IPP) ,( 收费)加速色彩变换,Haar 训练,DFT函数,这里我没有使用
  • Qt framework,opencv本身可以利用Qt库获得更好的图形界面支持(相对于最初始的highgui). 目前,qt支持到vs2010,如果使用vs2012就需要从源代码进行编译。
    • 下载qt库的开源安装包(在这里下载http://qt-project.org/downloads),我使用的是qt-win-opensource-4.8.4-vs2010.exe,直接运行安装即可
  • Eigen 针对线性代数运算的C++模板库,实现了线性代数的相关算法。下载并解压到相关的文件,如,D:\Develop\Eigen,我使用的是3.1.2版本,但是在编译opencv的时候,设置EIGEN_INCLUDE_PATH为D:/Develop/Eigen/eigen-eigen-5097c01bcdc4/Eigen/src,会提示找不到Eigen/core,我猜测可能要对Eigen编译安装才行。对Eigen的编译需要使用Fortain库。
  • OpenEXR,用于处理高动态范围的图像的函数库,下载并解压放在一个目录即可,如:D:\Develop\openexr-1.7.1
  • OpenNI Framework 没有使用,openNI与特定的采集设备配合可以实现人机交互,手势识别等等一系列的功能,其中一种采集设备就是Kinect

Step 2:使用CMake进行配置

  • 打开CMake(cmake-gui),设置”where is the source code”和”Where to build the binaries”,如下图所示:

在windows 7下配置opencv 2.4.3的开发环境

其中第一行是opencv源代码的位置,第二行是你想要用于编译opencv的位置,下面的Grouped和Advanced建议选上,可以对配置选项进行分组。

  • 按下左下方的Configure,选择Visual Studio 10,如图

在windows 7下配置opencv 2.4.3的开发环境

然后选择Finish,CMake会对当前的环境进行检测。如果没有问题就会完整显示如下画面:

在windows 7下配置opencv 2.4.3的开发环境

  • 在WITH中,勾选需要使用的特性,比如我要使用TBB和Qt,那么就把WITH_TBB,WITH_QT选上。

在windows 7下配置opencv 2.4.3的开发环境

  • 在Ungrouped Entries组中,手工指定CMake没有检测到,而你又需要使用的环境变量。比如,我需要TBB,就设定TBB_INCLUDE_DIRS为D:/Develop/TBB/tbb41_20121003oss/include等等。在这一步中,将上述第三方库诸如python,qt等的环境变量在Ungrouped Entries中设定好。
  • 浏览其它选项,选择需要的内容,特别地,在ENABLE中的ENABLE_SOLUTION_FOLDERS必须确定选上
  • 设定完成后,点击左下方Generate,生成vs2010的工程文件。

Step 3:使用vs2010进行编译

  • 进入在CMake中”Where to build the binaries”所设定的目录,打开vs2010的solution,通过选择下述的下拉菜单,来选择编译Debug版本和release版本(Build->Build Solution)。

在windows 7下配置opencv 2.4.3的开发环境

    • 编译安装DEBUG版本
      • 选择Debug模式,选择Build->Build Solution,等待build完成。这一过程中可能会出现缺少python27_d.lib相关的错误,可以不必理会
      • 在INSTALL项目上,右键单击,选择build,这一步会把debug模式相关的文件(include,lib等)生成到<build目录>\install下。这一过程中,关于python27_d.lib的错误可以不必理会
    • 编译安装RELEASE版本
      • 选择Release模式,选择Build->Build Solution,等待build完成。
      • 在INSTALL项目上,右键单击,选择build,这将会把release模式相关的文件(include,lib等)生成到<build目录>\install下。

最后生成的<build目录>\install如下图所示:

在windows 7下配置opencv 2.4.3的开发环境

<build目录>\install\lib如下图所示:(同时包含release和debug的库)

在windows 7下配置opencv 2.4.3的开发环境

  • 然后编译opencv的文档,如图所示,分别单独编译docs和html_docs(文档不会自动build)

在windows 7下配置opencv 2.4.3的开发环境

build过程会自动调用sphinx和Miktex进行文档的创建。docs的结果在<build目录>\doc中为pdf文件,html_docs的结果在<build目录>\doc\_html文件夹中为index.html。这时候可以再build一次INSTALL项目,将生成的文档安装到<build目录>\install\doc下

Step 4:添加OpenCV路径至PATH

推荐使用Path Editor进行添加,如下图所示:

在windows 7下配置opencv 2.4.3的开发环境

其中我还添加了TBB和Qt的bin路径。

另外,还可以设置系统的环境变量OPENCV_DIR来指向OpenCV的安装路径。我的是D:\Develop\Opencv\install

Step 5:检查OpenCV是否安装成功

打开<opencv Build目录>\install\bin\Debug\contours2.exe(或者其他程序),如果成功运行,则表示OpenCV安装成功!运行结果如下:

在windows 7下配置opencv 2.4.3的开发环境在windows 7下配置opencv 2.4.3的开发环境

 

遇到的问题

  • 问题一:在使用cmake的过程中,点击Configure后,提示如下:

The CXX compiler identification is MSVC 16.0.30319.1
The C compiler identification is MSVC 16.0.30319.1
Check for working CXX compiler using: Visual Studio 10
Check for working CXX compiler using: Visual Studio 10 -- broken
CMake Error at C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/CMakeTestCXXCompiler.cmake:54 (message):
  The C++ compiler "C:/Program Files/Microsoft Visual Studio
  10.0/VC/bin/cl.exe" is not able to compile a simple test program.

…… ……

LINK : fatal error LNK1123: failure during conversion to COFF: file invalid
or corrupt
[D:\Develop\Opencv\CMakeFiles\CMakeTmp\cmTryCompileExec521527363.vcxproj]

Done Building Project
"D:\Develop\Opencv\CMakeFiles\CMakeTmp\cmTryCompileExec521527363.vcxproj"
(default targets) -- FAILED.

…… ……

解决的办法:

       首先,打开cmd,切换到C:/Program Files/Microsoft Visual Studio 10.0/VC/bin/目录,执行cl.exe命令,出现错误,提示缺少mspdb100.dll,根据dudu的一篇文章《解决VS2010自带的C/C++编译器CL找不到mspdb100.dll的问题》,执行:

"C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat"
即可解决由环境变量缺失造成cl.exe不能使用的问题
       其次,对于 fatal error LNK1123,根据*的一个提问 LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt after installing VS2012 release preview,这是因为我安装了vs2012,导致vs2012自带的.NET4.5替换了原有的.NET,我卸载了vs2012以及.NET4.5组件,重新安装.NET4.0,再次Configure就好了。
       cl.exe不能正常执行是由error LNK1123造成的,单单解决环境变量问题不能解决“‘cl.exe’ is not able to compile a simple test program”的问题

  • 问题二:执行CMake的configure命令,出现如下错误:

CMake Warning at C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindQt4.cmake:615 (message):
  C:/Qt/Qt5.0.0/5.0.0/msvc2010/bin/qmake.exe reported QT_INSTALL_LIBS as
  "C:/Qt/Qt5.0.0/5.0.0/msvc2010/lib" but QtCore could not be found there.  Qt
  is NOT installed correctly for the target build environment.
Call Stack (most recent call first):
  cmake/OpenCVFindLibsGUI.cmake:8 (find_package)
  CMakeLists.txt:377 (include)

…… ……

解决的办法:

这一问题是因为,一开始我使用的是Qt5,我在C:/Qt/Qt5.0.0/5.0.0/msvc2010/lib中确实没有找到QtCore,而且CMmake使用的是FindQt4.cmake,并不能找到Qt5的一些关键文件。换句话说,目前CMake(2.8.10.2)并不支持Qt5,所以我只好将Qt5卸载然后安装qt-4.8.4,问题解决。

  • 问题三:在使用vs2010编译Debug版本的opencv时,提示如下错误:

Error    1    error LNK1104: cannot open file 'python27_d.lib'    D:\Develop\Opencv\modules\python\LINK

解决的办法:
这是因为在编译Debug版的opencv时需要使用debug类型的库,python27_d.lib是python的debug库,这个问题不解决也没有关系。如果要解决的话,可以下载python的源代码,然后编译python的Debug版本即可,不是一般的麻烦。

  • 问题四:如果在CMake中设置了GIT_EXECUTABLE,运行Configure之后,会显示缺少libiconv-2.dll的错误

解决的方法:

这个问题的解决可以参考*上的一个提问Git for Windows - The Program can't start because libiconv2.dll is missing,而我由于没有设置GIT_EXECUTABLE,所以就回避了这个问题。

主要参考资料

OpenCV的在线文档《Installation in Windows》,http://docs.opencv.org/doc/tutorials/introduction/windows_install/windows_install.html#windowssetpathandenviromentvariable