visual studio 2010下安装OpenCV及相关配置

时间:2021-07-19 03:36:13

最近在学习opencv。在网上了下了一些帮助文档。在安装过程中发现了一些问题。按照本人的实践过程,做了调整。希望给各位有所帮助

1.  下载文件

OpenCV2.1官方地址:

http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.1/OpenCV-2.1.0-win.zip/download

推荐本论坛地址:http://www.opencv.org.cn/download/OpenCV-2.1.0-win32-vs2008.exe
CMAKE .8.1

http://www.cmake.org/files/v2.8/cmake-2.8.1-win32-86.exe
INTELTBB3.0

http://www.threadingbuildingblocks.org/uploads/77/151/3.0/tbb30_20100406oss_win.zip

2.  安装CMAKE

1. 首先安装CMAKE2.8.1,

2. 然后将OpenCV2.1安装到你将要放置OPENCV的地方,

3. 接着,解压INTEL TBB3.0

比如将OPENCV和TBB都放在D:\ProgramFiles里面。并在OpenCV文件夹下创建子目录D:\ProgramFiles\OpenCV2.1\vs2010,用于存放编译结果。检查D:\ProgramFiles\OpenCV2.1\bin和D:\Intel TBB 3.0\bin\ia32\vc10是否已经被加入到环境变量(我的电脑-属性-环境变量)PATH,如果没有,请加入。加入后需要注销当前Windows用户(或重启)后重新登陆才生效。(可以在任务管理器里重启explorer.exe)

3.  使用CMAKE生成OpenCV的项目解决方案文件

打开CMAKE 2.8.1,在Where is the source code后面填写(或者选择)OPENCV 2.1的安装目录,如D:\Program Files\OpenCV2.1,在Where to build the binaries里填写刚创建的子目录D:\ProgramFiles\OpenCV2.1\vs2010。接着点击Configure按钮,在出现的对话框中选择Visual Studio 10,下面的选项选择Use default nativecompilers,点击Finish继续。

过一会儿之后会出现一个配置窗口(此处注意在CMAKE配置的时候是不能够打开VS2010的),然后勾选BUILD_SHARED_LIBS,BUILD_TESTS,OPENCV_BUILD_3DPARTY_LIBS,以及下面的WITH_JASPER,WITH_JPEG,WITH_PNG,WITH_TBB(一般这个没默认选上),和WITH_TIFF选项

勾好后再次点击Configure,之后再配置窗口最上面会出现TBB_INCLUDE_DIR-NOTFOUND字样的红色选项,此处为CMAKE找不到INTEL TBB的包含文件为之所致,将INTEL TBB 3.0里面的INCLUDE文件夹路径(注意是INCLUDE,不是INCLUDE里面的子文件夹)定位到该配置属性的路径里,再次点击Configure,在TBB_LIB_DIR处又会出现红色一行,此处为INTEL TBB的库文件位置,此处必须将路径定位到含有LIB文件的位置,比如我的安装位置是D:/Program Files/Intel TBB 3.0/lib/ia32/vc10,也就是说,在lib文件夹下会有子文件夹,必须定位到子文件夹对应的VC版本文件夹里去,这里由于是配置VS2010,所以我们选择VC10文件夹,ia32子文件夹是32位系统,此处应根据对应操作系统选择。

然后,我们再次点击Configure,此时所有红色行已经变为白色,同时在下方的信息里面会有一条为Use TBB:YES的字样,证明我们已经将INTEL TBB配置完毕,然后点击Generate。

完成后在刚创建的子文件夹D:\Program Files\OpenCV2.1\vs2010下会出现一个VS2010的解决方案文件OPENCV.sln。

4.  编译OpenCV

4.1.  去掉ffmpeg配置

打开J:\public\OpenCV-2.3.0\vs2010\cmake_install.cmake

将其中的与opencv_ffmpeg230d.dll有关的语句注释掉,如下:

 

 

#IF(NOTCMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL"main")

#  FILE(INSTALL DESTINATION"${CMAKE_INSTALL_PREFIX}/bin" TYPE FILE FILES"J:/public/OpenCV-2.3.0/vs2010/bin/Debug/opencv_ffmpeg230d.dll")

#ENDIF(NOTCMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL"main")

 

#IF(NOTCMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL"main")

#  FILE(INSTALL DESTINATION"${CMAKE_INSTALL_PREFIX}/lib" TYPE FILE FILES"J:/public/OpenCV-2.3.0/vs2010/lib/Debug/opencv_ffmpeg230d.lib")

#ENDIF(NOTCMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL"main")

 

之所以可以把这两行注释掉是因为项目中不存在opencv_ffmpeg230d对应的源文件,因此不会生成opencv_ffmpeg230d.dll和lib文件,从官方给的superpack文件中也可以看出,没有opencv_ffmpeg230d.dll文件及lib文件。

 

后来发现2.3版本中的ffmpeg被放到了3rdparty文件夹中,这个与2.2版本的不同。2.3中的ffmpeg需要使用mingw下的gcc编译,而且有64位的版本,从ffmpeg文件夹中的make.bat可以看出:编译只是生成了opencv_ffmpeg.dll,并没有lib及其版本号,因此这是个瑕疵。

 

4.2.  Tbb配置修改

 

IF(NOTCMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL"main")

  FILE(INSTALL DESTINATION"${CMAKE_INSTALL_PREFIX}/bin" TYPE PROGRAM FILES "J:/public/tbb30_20110704oss/bin/ia32/vc10/tbb.dll")

ENDIF(NOTCMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL"main")

 

IF(NOTCMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL"main")

  FILE(INSTALL DESTINATION"${CMAKE_INSTALL_PREFIX}/bin" TYPE PROGRAM FILES "J:/public/tbb30_20110704oss/bin/ia32/vc10/tbb_debug.dll")

ENDIF(NOTCMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL"main")

 

目录错了。不在…lib/ia32…下,而应该在…bin/ia32…

而且斜杠也错了。

4.3.  属性配置

 

在刚创建的文件夹D:\Program Files\OpenCV2.1\vs2010下会出现一个VS2010的解决方案文件OPENCV.sln,双击打开后,出现OPENCV 2.1的所有工程项目,先不要着急编译。首先点击Solution Explorer(解决方案资源管理器)里面Property Manager(属性管理器)下的选项卡,依次展开ALL_BUILD—Debug|Win32—右键单击Microsoft.Cpp.Win32.user,选择Properties(属性),然后选择VC++ Directories(VC++目录),在Executable Directories(可执行文件目录)里面将INTEL TBB 3.0的可执行路径(bin)填写到里面,此处与LIB一样,必须定位到VC10才可以,例如我的是D:\Program Files\Intel TBB3.0\bin\ia32\vc10,将Include Directories(包含目录)定位到Intel TBB的Include文件夹即可,无需再往深入定位,在Library Directories(库目录)里填写Intel TBB的LIB文件位置,定位到VC10文件夹。

单击确定之后,将选项卡切回到Solution Explorer(解决方案资源管理器),将编译模式切换为Debug模式,右键单击SolutionOpenCV(解决方案OpenCV),选择Rebuild Solution(重新生成解决方案),编译后再右键单击INSTALL项目,选择Build(生成),之后将编译模式切换为Release,重复debug模式下的步骤。完成后在你的解决方案文件夹D:\ProgramFiles\OpenCV2.1\vs2010里面的install目录下会生成bin目录,include目录,lib目录。

然后在VS2010里切回到Property Manager(属性管理器),像上面一样展开Microsoft.Cpp.Win32.user后选择Properties(属性),最后在VC++Directories(VC++目录)里面增加子文件夹

D:\Program Files\OpenCV2.1\vs2010下的可执行文件(bin),

包含文件(include\opencv),

J:\public\OpenCV-2.3.0\vs2010\install\include\

以及库文件(lib),

源文件(src\cv、src\cvaux、src\cxcore、src\highgui、src\ml)(没有找到),确定,退出并保存更改。(注意只有重启vs,上述配置才能生效)

检查D:\Program Files\OpenCV2.1\vs2010\bin是否已经被加入到环境变量(我的电脑-属性-环境变量)PATH,如果没有,请加入。到此OPENCV 2.1配置完成,

将J:\public\OpenCV-2.3.0\vs2010\install\bin加入到PATH环境变量下。这个目录保存着所需的dll文件。如果这个dll目录没有配置成功或者没有重启机器使配置生效。则会出现编译成功,但是在执行时报错:无法启动此程序,因为计算机中丢失*.dll。尝试重新安装该程序以解决此问题。

 

5.  使用OpenCV建立解决方案

以后建立OPENCV项目时都需在项目里面添加依赖库,方法是在Solution Explorer(解决方案资源管理器)里面右键选择项目,选择Properties(属性),然后在Linker(链接器)里面选择Input(输入),在依赖库里添加OPENCV的LIB文件夹里的LIB文件名称即可,文件名后面有小写字母“d”的为Debug库(调试模式库),没有“d”的为Release库(发布模式库)。

例如active(debug)[活动(debug)]里添加opencv_calib3d230d.lib

opencv_contrib230d.lib

opencv_core230d.lib

opencv_features2d230d.lib

opencv_flann230d.lib

opencv_gpu230d.lib

opencv_highgui230d.lib

opencv_imgproc230d.lib

opencv_legacy230d.lib

opencv_ml230d.lib

opencv_objdetect230d.lib

opencv_ts230d.lib

opencv_video230d.lib

release里添加:

opencv_calib3d230.lib

opencv_contrib230.lib

opencv_core230.lib

opencv_features2d230.lib

opencv_flann230.lib

opencv_gpu230.lib

opencv_highgui230.lib

opencv_imgproc230.lib

opencv_legacy230.lib

opencv_ml230.lib

opencv_objdetect230.lib

opencv_ts230.lib

opencv_video230.lib

 

此时应该大功告成了吧。