您的位置:首页 > 运维架构

OpenCV2.4.9 官方预编译版本+Visual Studio 2013+win8.1 x64 环境 配置记录

2014-12-02 12:12 381 查看
\\Note:赶进度,没有尝试自己编译OpenCV库,本日志所用OpenCV库为OpenCV官网预编译好的版本

时间 2014年12月1日

配置环境:win8.1 x64系统 (win7 x64系统应该也适用)

OpenCV版本:2.4.9 官方预编译版本

IDE:Visual Studio 2013

配置参考教程 OpenCV官方文档:

1. Installation in Windows
http://docs.opencv.org/trunk/doc/tutorials/introduction/windows_install/windows_install.html#windowssetpathandenviromentvariable
2. How to build applications with OpenCV inside the Microsoft Visual Studio http://docs.opencv.org/trunk/doc/tutorials/introduction/windows_visual_studio_Opencv/windows_visual_studio_Opencv.html#windows-visual-studio-how-to
(官方文档其实很详细很全,如果按照步骤一步步来应该大方向上不会有问题的,不过个人在配置过程中还是遇到了一些需要注意的小问题,这里记录一下)

配置过程:

1. 下载官方已编译好的OpenCV库:http://opencv.org/downloads.html



选择 OpenCV for Windows。

2.将下载好的库放在一个自己喜欢的目录下。

其目录结构大致如下:

总目录:



其中,build为openCV官方编译好的openCV库,sources为该版本openCV的源码。我们在IDE开发环境里需要用的,就是build里面已编译好的库文件。

build目录结构:



跟本日志配置相关的目录有三个,一个是include文件夹,这里包含了该版本openCV的头文件;另外两个分别是x64和x86文件夹,里面分别包含针对开发64位程序与开发32位程序所需要的openCV库文件。

以x86目录为例,其结构如下:



vc10,vc11,vc12分别为针对visual studio 2010,2011,2012编译的openCV库文件。因为本日志所用IDE为VS2013,所以选择了vc12:



bin文件夹里包含了开发openCV程序时所需要的所有动态链接库文件,lib里面是openCV的lib文件,由于刚入门,这两者的真正区别现在只有一个感性认知,尚未深入了解,等以后有时间把它补上。#希望自己别忘记了。。。#

3. 现在我们有了openCV库,也大致了解了它的目录结构,那么,在将openCV库配置到IDE的过程中,实际上,我们需要做两件事:

(1)* Tell to the compiler how the OpenCV library looks. You do this by showing it the header files.

(2)* Tell to the linker from where to get the functions or data structures of OpenCV, when they are needed.
*:摘自openCV官方文档How to build applications with OpenCV inside the Microsoft Visual Studio

在做这两件事情之前,为了以后方便,我们还需要做一些准备工作--利用windows的系统环境变量配置好OpenCV库路径:

3.1 在windows的系统环境变量中配置OpenCV库所在的目录和OpenCV的动态链接库目录。

电脑=》属性=》高级系统设置=》环境变量



3.1.1 在“系统变量”里新建变量名为“OPENCV_DIR”的环境变量,其变量值为”<your OpenCV DIR>\build\<OpenCV program architecture>\<your vs version>"

其中,<your OpenCV DIR>为OpenCV库在你的PC上的路径;<OpenCV program architecture>为开发包含OpenCV库的程序的目标系统架构,根据情况选择x86或者x64;<your vs version>为你的Visual Studio版本,这里因为下载的官方库尚未提供vs13版本,因此我选择了最新的vs12。



在配置好这一环境变量后,以后我们在IDE里需要引用OpenCV时,可以直接以OPENCV_DIR做为OPENCV库所在的路径,这样如果我们以后openCV库路径有所变动,或者我们将项目移植到别人电脑上时,就会省去在IDE逐一更改显式路径的麻烦。

接下来,我们需要配置OpenCV的dll路径。dll是windows可执行程序在runtime时会调用的动态链接库。一种配置方式是在系统变量Path里面加入程序需要调用的动态链接库路径,这样程序在运行时,系统就知道该去哪里找相应的dll了:

在“系统变量”列表里找到名为“Path”的系统变量:



在其变量值里加入OpenCV的bin路径:"%OPENCV_DIR%\bin" (注意,因Path里存储了许多路径,新增路径时注意添加英文分号';'做为间隔符)



好了。至此我们的准备工作就完成了。接下来开始配置IDE。

3.2 启动VS2013,文件=》新建=》项目



选择Win32控制台应用程序,在这里我将项目命名为“HelloOpenCV”,哈哈,配置为空项目



接下来有两种配置方法,一种是全局配置,也就是在VS2013里的所有项目都会被配置上OpenCV库,一种是local配置,也就是只为当前的项目配置OpenCV。方法不同,各有利弊,我选择的是local的方法:

1.视图=》属性管理器,在这里我们来配置HelloOpenCV链接OpenCV库所需要配置的属性:

在属性管理器面板上,我们可以看到Debug和Release两个目录,也就是说,实际应用过程中,我们可以根据情况为debug和release版本分别定义不同的编译规则:





下面以配置Debug版本的编译规则为例:

右键Debug,添加新项目属性表



方便起见,我将它命名为OPENCV_Debug。

接下来,在"C/C++"选项里配置OpenCV的头文件路径,这里我们就看到之前配置环境变量OPENCV_DIR的好处了

在“附加包含目录”里添加"$(OPENCV_DIR)\..\..\include" 。这条语句的意思是,前往OPENCV_DIR所指的的目录=>返回上一级=>返回上一级=>在当前目录下找到include文件夹做为附加包含目录之一。



好,至此我们配置好头文件路径了,接下来去配置链接器。

还是在OpenCV_Debug属性页,前往“链接器”选项:

1.“链接器”=>常规:选择“附加库目录” 在这里添加OpenCV库的lib文件夹(这里的含义还不是很清楚,有时间学习一下):"$(OPENCV_DIR)\lib"



2.“链接器”=>输入:在”附加依赖项“里加入程序所需要用到的OpenCV lib文件:

点击编辑:



需要注意的是,我们目前配置的是Debug版本的编译规则,OpenCV为我们提供了两种版本的lib,其区别在于:

Debug:

opencv_(The Name of the module)(The version Number of the library you use)d.lib


Release:

opencv_(The Name of the module)(The version Number of the library you use).lib

注意到了吗,debug版本的lib文件名末尾比release版本的多了一个d,表示为debug版本。

因此,现在我们在附加依赖项里加入debug版本的lib文件。在这里,我所安装的OpenCV 2.4.9的debug lib文件名列表如下:

opencv_calib3d249d.lib

opencv_contrib249d.lib

opencv_core249d.lib

opencv_features2d249d.lib

opencv_flann249d.lib

opencv_gpu249d.lib

opencv_highgui249d.lib

opencv_imgproc249d.lib

opencv_legacy249d.lib

opencv_ml249d.lib

opencv_nonfree249d.lib

opencv_objdetect249d.lib

opencv_ocl249d.lib

opencv_photo249d.lib

opencv_stitching249d.lib

opencv_superres249d.lib

opencv_ts249d.lib

opencv_videostab249d.lib

release版本的文件名与这个列表相同,只不过每个文件名末尾都少了一个d。

在添加完依赖项之后,确定,保存。至此,我们的OpenCV应该就是配置完毕了。(注意,这里release的配置跟debug基本类似,所以略去了)

4. Next,test it!

好,现在将官方文档http://docs.opencv.org/trunk/doc/tutorials/introduction/windows_visual_studio_Opencv/windows_visual_studio_Opencv.html#windows-visual-studio-how-to

上的demo拿来测试一下配置是否正确。

在这里,因为官方文档是openCV3.0版本的demo,所以直接拿来用之前还要更改一下include文件:



#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
改为

#include <opencv2/opencv.hpp>
#include <iostream>
不能直接用demo的include配置的原因应该是我的opencv版本跟官方demo用的不一致的问题,在这里,我将include更改为openCV2.4.9 里的opencv.hpp文件,就好了,这个文件好像包含了opencv里面(好像是所有吧。。)的头文件,具体细节,感兴趣可以去$(OPENCV_DIR)\build\opencv2里找opencv.hpp看一下它里面的内容。

接下来我偷了个小懒,把这段代码注释掉:

/*if (argc != 2)
{
cout << " Usage: display_image ImageToLoadAndDisplay" << endl;
return -1;
}*/


然后硬编码了一个test图像路径:

Mat image;
image = imread("<Your test img DIR>", IMREAD_COLOR); // Read the file


好了,运行,结果如下:



附注:

在最后test过程中,我遇到的问题有:

1. include文件报错

原因:官方demo与我下载的版本不符。

解决方案:更改代码中的include配置

2.运行程序时报 ”xxx.dll 丢失/找不到"

原因:IDE没有找到OpenCV的动态链接库

解决方案:

(1)确认环境变量中的OPENCV_DIR指定的opencv路径是正确的。

(2)确认在系统变量“Path”中已添加OpenCV的bin路径:%OPENCV_DIR%\bin

(3)确认已配置的环境变量已经被系统更新:重启或注销系统,再看看运行情况。

后记:

恩,其实最开始我是在Mac OSX下配置的OpenCV,期间经历了安装homebrew,安装cmake,安装openCV,然后配置xcode。。。。

最后很蛋疼地发现mac osX更新实在太快,在OS 10.10,xcode6.1环境下的openCV配置、开发资料网上少得可怜,也就stackoverflow有那么一丁点。。。

楼主这几天为了套一个加拿大的教授,下载他的还不太稳定的开源项目,拿来在xcode上跑直接跪了。。。各种版本、配置、编译器问题。。。

在和xcode糜战一周后,我做了至今为止感觉很正确的一个选择:果断转成win环境,拿vs学习好了OpenCV再说。

OpenCV在Win下的,尤其是vs IDE环境下的教程资料真的很丰富,很容易找,今天一个上午就把它搞定了,比起xcode,简直轻松许多。

当然,不是说xcode不好,做为苹果家的御用编译器,xcode还是很多很多优点的,不过,针对我的学习目标,想要短时间内掌握OpenCV基础的话,我觉得还是在一个比较好找到资料的环境下学习来的容易一些。就酱,that‘s all。去看论文了~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: