环境
操作系统: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,如图:
这里好像是需要自已进行编译的,所以还是采用第二种方法。
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左右包括了预编译的库等):
- 第一方式,使用git工具获取最新源代码 (比较慢)
- 下载安装msysgit,https://code.google.com/p/msysgit/downloads/list,我使用的是msysGit-fullinstall-1.8.1-preview20130110.exe
- 下载安装TortoiseGit,https://code.google.com/p/tortoisegit/wiki/Download,这是git的一个GUI前端,方便使用。我使用的版本是TortoiseGit-1.7.15.0-32bit.msi。安装好后设置msysgit的地址,打开settings,设置Git.exe目录,
- 在D盘建立文件夹opencv,进入这个文件夹,右键选择Git Clone,在URL中填入 https://github.com/Itseez/opencv.git,点击OK
- 第二方式,使用打包好的代码安装程序(推荐这一种方式),可以在http://sourceforge.net/projects/opencvlibrary/files/opencv-win/下载,其实就是OpenCV-2.4.3.exe这个程序,直接运行即可 。我把解压后得到的opencv文件夹放在D:\Develop\opencv_src中。
- 第一方式,使用git工具获取最新源代码 (比较慢)
上面三项内容已足以开始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”,如下图所示:
其中第一行是opencv源代码的位置,第二行是你想要用于编译opencv的位置,下面的Grouped和Advanced建议选上,可以对配置选项进行分组。
- 按下左下方的Configure,选择Visual Studio 10,如图
然后选择Finish,CMake会对当前的环境进行检测。如果没有问题就会完整显示如下画面:
- 在WITH中,勾选需要使用的特性,比如我要使用TBB和Qt,那么就把WITH_TBB,WITH_QT选上。
- 在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)。
- 编译安装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如下图所示:
<build目录>\install\lib如下图所示:(同时包含release和debug的库)
- 然后编译opencv的文档,如图所示,分别单独编译docs和html_docs(文档不会自动build)
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进行添加,如下图所示:
其中我还添加了TBB和Qt的bin路径。
另外,还可以设置系统的环境变量OPENCV_DIR来指向OpenCV的安装路径。我的是D:\Develop\Opencv\install
Step 5:检查OpenCV是否安装成功
打开<opencv Build目录>\install\bin\Debug\contours2.exe(或者其他程序),如果成功运行,则表示OpenCV安装成功!运行结果如下:
遇到的问题
- 问题一:在使用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,根据stackoverFlow的一个提问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的错误
解决的方法:
这个问题的解决可以参考stackoverflow上的一个提问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