blueyi's notes

Follow Excellence,Success will chase you!

0%

Windows下OpenCV与VS开发环境配置

关于环境配置

网上有一大堆这样那样的方法,官方有详细且简单的教程,为什么要舍近求远呢,甚至有些书上还义正言辞地认为自己的配置方法非常好,其实他自己都不清楚为什么需要那些步骤,官方教程的windows配置方法:http://docs.opencv.org/3.0-last-rst/doc/tutorials/introduction/windows_install/windows_install.html

整理简化点,步骤如下:

下载并安装

官网下载地址:http://opencv.org/downloads.html
双击下载下来的EXE文件后自解压到某一目录下,我是直接放D盘根目录了,即:D:\opencv,解压之后opencv会将整个源代码,即编译好的支持VS不同版本及不同位数二进制一并放在了这个目录,我们稍后只需要根据自己的系统需要来选择不同的版本即可,这里的版本不是指版本号,而是X64还是X86,VS2013还是VS2010

设置环境变量

新建系统环境变量OPENCV_DIR:
我安装的是2.4.13版本,并且系统是64位win10下的VS2013,所以我需要使用的是支持x64的VS2013的opencv,那么实际上我需要使用的opencv的根目录就是D:\opencv\build\x64\vc12,vc12即对应VS2013,关于VS的对应关系如下:

  • vc14: Visual Studio 2015
  • vc12: Visual Studio 2013
  • vc11: Visual Studio 2012
  • vc10: Visual Studio 2010

在系统属性-高级系统设置-环境变量-系统环境变量中新建一个名为OPENCV_DIR,值为D:\opencv\build\x64\vc12的系统环境变量用于后面需要引用opencv目录的地方使用环境变量来引用,方便以后更改opencv安装位置时只需要修改环境变量即可。值根据你的安装位置和需要的版本来自己修改,x64系统支持x86,所以如果想使用x86,也可以
或者可以直接使用命令来处理,需要管理员权限:setx -m OPENCV_DIR D:\opencv\build\x64\vc12

追加PATH环境变量:
为了使系统可以找到opencv的动态连接库和可执行程序,需要将我们所需要的opencv的bin目录加入到PATH环境变量中,WIN10系统直接双击PATH然后新建,输入%OPENCV_DIR%\bin保存即可,win7则需要在PATH变量的最后办输入;%OPENCV_DIR%\bin保存,注意不要落下那个分号。其实配置过JAVA环境变量的应该这些都非常容易

配置VS的项目属性

配置VS的项目属性其实就是告诉VS这个巨牛的IDE:去哪找opencv的头文件和去哪找opencv的动态连接库。由于为了调试方便,所以opencv的链接库在设计时有个debug版和普通版(即release版),所以可以在VS里面创建这两个版本的编译选项。
由于这些设置需要在用户属性页(即解决方案中的各项目属性)中设置,所以首先需要新建一个项目,然后在项目的属性页中设置。
其实也可以在项目属性页中直接设置所有项目所需要使用的库和头文件路径,但考虑到有可能还会需要有其他语言的项目,所以还是直接在所需要的类型语言下的项目下设置更合理。

新建项目
打开VS2013-新建项目,选择Visual C++下的Win32控制台应用程序,记得输入你的项目名称和解决方案名称,选为空项目。

增加x64平台的debug和release的配置属性
由于默认是32位,所以首先增加64的平台支持
点击菜单中的视图-属性管理器,会显示出来当前项目的属性管理器页面,展开后发现里面已经有了Win32平台下的Debug和Release,假如你是x86平台,可以跳过这步,直接配置win32下的对应属性即可。双击属性管理器窗口中你的项目名称即可打开项目属性页,点击左侧的配置属性激活配置管理器,在配置选项中可以看到显示的Win32处理活动状态。点击配置配置管理器,在活动解决方案平台下点击win32,即可新建x64平台,创建新的项目平台之后在属性管理器窗口中便可看见x64平台对应的Debug和Release版本。

Opencv属性页
我们可以直接双击属性管理器中的Debug|x64来修改项目属性页,也可以新建一个项目属性表,便于以后使用,也以免搞混乱项目属性。在总的属性页中的修改会默认被继承到以后新建的其他项目中,所以网上提到的一劳永逸的方法,并不是好方法。
下面新建debug下的项目属性表:
右单击Debug|x64添加新项目属性表,可以看到右键里面有个添加现有表,所以新建之后保存那个属性表文件就可以随意携带和添加了。新建属性表名称输入:OpenCV_x64_Debug,然后就可以在属性管理器中看见了,双击它来配置属性。由于我们使用的opencv的开发是C++项目,所以在C/C++选项中设置,网上有方法在VC++目录下设置,也可以,但不推荐。
点击C/C++中的常规,附加包含目录右边小箭头点编辑,新建一行,输入:$(OPENCV_DIR)\..\..\include确定即可,记得你已经提前配置好了OPENCV_DIR环境变量。
点击链接器中的常规,同样的方法在附加库目录中添加新行,内容为$(OPENCV_DIR)\lib
点击链接器中的输入,编辑添加附加依赖项。由于我们现在配置的是debug版本,所以在链接时要求VS输入我们debug版本的opencv链接库。按我之前的配置情况下,我所需要的所有链接库都在目录D:\opencv\build\x64\vc12\lib中,里面所有lib文件名中点前面带d结尾的都是debug版本的,不带d结尾的是release,所以我们把所有带d结尾的完整文件名,一行一个输入即可。这里提供一个方法批量提取带d的文件名文本:
在lib目录下右单击,打开命令行,输入dir /b > t.txt,将所有文件名一行一个输出到t.txt中。假如电脑上有vim,用vim打开,首先删除不是以lib结尾的行,然后输入:g /.*\d\./d,剩下的19行就是我们需要的内容,复制出来粘贴到VS那个附加依赖项中即可。如果需要的是release版本的内容,把刚才的命令换成:g /.*\dd\./d即可。
获取到的debug版本的库如下,如果觉得上面的过程麻烦,直接复制这个,把我安装的2413换成你的版本号去掉点就可以了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
opencv_calib3d2413d.lib
opencv_contrib2413d.lib
opencv_core2413d.lib
opencv_features2d2413d.lib
opencv_flann2413d.lib
opencv_gpu2413d.lib
opencv_highgui2413d.lib
opencv_imgproc2413d.lib
opencv_legacy2413d.lib
opencv_ml2413d.lib
opencv_nonfree2413d.lib
opencv_objdetect2413d.lib
opencv_ocl2413d.lib
opencv_photo2413d.lib
opencv_stitching2413d.lib
opencv_superres2413d.lib
opencv_ts2413d.lib
opencv_video2413d.lib
opencv_videostab2413d.lib

应用-确定即可完成保存,然后在属性管理器窗口中右键我们刚新建的配置点击保存,在项目文件夹中会看到名为OpenCV_x64_Debug.props的文件,该文件即可在以后其他的项目中加载来省去我们的配置过程。当然如果你刚才不是通过新建而是直接修改的属性,会在你以后新建项目时永久生效。
release版本的步骤完全一样,只是把那库改成不带d的版本即可。
下面给出release版本的库文件名列表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
opencv_calib3d2413.lib
opencv_contrib2413.lib
opencv_core2413.lib
opencv_features2d2413.lib
opencv_flann2413.lib
opencv_gpu2413.lib
opencv_highgui2413.lib
opencv_imgproc2413.lib
opencv_legacy2413.lib
opencv_ml2413.lib
opencv_nonfree2413.lib
opencv_objdetect2413.lib
opencv_ocl2413.lib
opencv_photo2413.lib
opencv_stitching2413.lib
opencv_superres2413.lib
opencv_ts2413.lib
opencv_video2413.lib
opencv_videostab2413.lib

验证环境

切换到解决方案资源管理器,右单击新建项选择C++文件,输入文件名并添加。输入如下源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{

Mat image;
image = imread("F:\\cat.jpg", IMREAD_COLOR); // Read the file,注意换成你自己的图片文件路径

if (image.empty()) // Check for invalid input
{
cout << "Could not open or find the image" << std::endl;
return -1;
}

namedWindow("Display window", WINDOW_AUTOSIZE); // Create a window for display.
imshow("Display window", image); // Show our image inside it.

waitKey(0); // Wait for a keystroke in the window
return 0;
}

调试中选择开始执行不调试,或者直接ctrl+F5,确定生成,如果出现了你指定的图片,则表示环境配置成功
可以在VS上方选择解决方案配置Debug还是Release,以及在平台中选择x64还是Win32

到这里你应该明白VS的项目属性管理的作用和处理方法了,如果想开发32位版的程序,只需要类似的方法添加32位版本的属性并修改之前设置的环境变量即可。甚至可以直接修改32位版的属性时指定绝对路径,而无需修改环境变量。

从上面的代码也可以看出opencv编程其实就是包括上opencv的头文件,然后调用相应的函数即可,剩下的就完全是C++了。
opencv2/opencv.hpp中包含了几乎所有opencv库的重要头文件,所以直接只包含这一个头文件即可引入几乎整个opencv的库。

Welcome to my other publishing channels