前言:我看了很多网上配置opencv的文章,个人感觉不是很全面,本文做一个比较全面的总结,我们配置OpenCV的时候不仅仅希望对一个项目进行配置,我们希望每次创建opencv程序的时候,都可以直接使用,即所谓的永久配置。本文的开发环境是Visual Studio 2017加上opencv4.1.1 。

另外这里需要使用VS2017加以配置,有几个关键的概念:包含目录、附加包含目录、库目录、附加库目录等,参考前一篇文章:Visual Studio中C++的包含目录、附加包含目录和库目录和附加库目录的区别

一、下载opencv安装包及前期准备

注意:本文是在Windows平台上直接下载的安装包,不需要自己编译了。

1.1 OpenCV的下载与安装

在SourceForge上面下载:https://sourceforge.net/projects/opencvlibrary/files/4.1.1/opencv-4.1.1-vc14_vc15.exe/download

下载完成之后,会得到一个  

opencv-4.1.1-vc14_vc15.exe

的可执行文件,大概200多兆,然后点击安装,这里的安装实际上就是一个解压的过程,我们选择解压到下面的文件夹:

D:\Program Files\Opencv4.1.1

它会在该目录之下自动创建一个opencv文件夹,解压完成之后即可使用了。

就是这么简单。

1.2 OpenCV的前期简单配置

(1)第一步:添加环境变量PATH

将下面两个目录添加到环境变量PATH中

D:\Program Files\Opencv4.1.1\opencv\build\x64\vc14\bin

D:\Program Files\Opencv4.1.1\opencv\build\x64\vc15\bin

注意:

这里的vc14对应于Visual Studio 2015,vc15对应于Visual Studio 2017,我们选择性的添加一个就行了,否则可能胡导致一些问题,如果两个同时添加,我将vc14放在了vc5前面,但是我是用的又是VS2017,可能就会出错,所以添加一个即可。

(2)第二步:几个库文件的拷贝

比如我刚才添加的环境变量是:

D:\Program Files\Opencv4.1.1\opencv\build\x64\vc15\bin

将bin这个目录之下的   

  • opencv_world411.dll和opencv_world411d.dll文件   复制到  C:\Windows\SysWOW64 
  • opencv_ffmpeg411_64.dll  复制到   C:\Windows\System32

注意:我这里使用的是64位的版本哦!

注意:

网上很多教程没有这个第二步,会报那种找不到dll文件的错误,是因为没有将opencv里面的相关文件复制到C盘中的文件夹里面,但是我自己没有这里的第二步,然后使用OpenCV的时候也没有出错,所以我不太确定这一步是不是一定会报错,为了安全起见,还是复制进去吧,也不费多大的事!

为什么需要将这几个dll文件拷贝到这两个文件夹之下呢?它们实际上就是几个动态链接库,在Windows系统里面,动态链接库的运行时连接也有一个搜索顺序,如下文章:

VS2017的动态链接库(Dynamic Link Library)配置

 

二、VS2017配置OpenCV4.1.1

新建一个C++项目,打开项目属性,者就不多说了。

2.1 配置头文件所在的目录(包含目录/附加包含目录)

使用包含目录和附加包含亩均可以,二者的区别仅仅是搜索顺序不一样而已,参见我的前一篇文章,

这里就以包含目录为例子说明。

将下面两个目录添加进去到包含目录里面去:

visualstudio使用opencv里的代码 vs如何使用opencv库_OpenCV配置与使用

即:

D:\Program Files\Opencv4.1.1\opencv\build\include

D:\Program Files\Opencv4.1.1\opencv\build\include\opencv2

2.2 配置库文件所在的目录(库目录和附加库目录)

依然以 库目录为例,将下面的目录添加进去即可:

D:\Program Files\Opencv4.1.1\opencv\build\x64\vc15\lib

2.3 添加 附加依赖项文件 

将2.2中的库目录里面的一个静态库添加到附加依赖项,如下:

visualstudio使用opencv里的代码 vs如何使用opencv库_OpenCV环境永久配置的方法_02

如下:

opencv_world411d.lib   # 这个是调试专用的,多了一个字母d,表示debug,我们添加这个即可

opencv_world411.lib    #下面这个是release版本的,

 2.4 更改为 x64 平台

由于我们下载的均是64位的,所以需要配置一下,在两个地方都要更改,如下:

visualstudio使用opencv里的代码 vs如何使用opencv库_配置文件_03

visualstudio使用opencv里的代码 vs如何使用opencv库_OpenCV环境永久配置的方法_04

经过上面的 2.1  2.2  2.3  2.4  四个步骤的配置,现在就可以编写opencv代码了,我们做一个简单的测试:

2.5 简单的测试

测试代码如下:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
int main()
{
	Mat img = imread("1.jpeg");
	imshow("yinbao", img);
	waitKey(6000);
	std::cout << "i love u" << std::endl;
	getchar();
	return 0;
}

运行结果为:

visualstudio使用opencv里的代码 vs如何使用opencv库_Windows的OpenCV安装配置_05

三、永久配置

上面就是VS2017结合OpenCV4.1.1的配置过程,整个配置过程比较简单,但是有一个问题,难道我每次开发一个OpenCV程序都需要将上面的步骤从 2.1  2.2  2.3  2.4 完整的配置一遍吗?那不是比较麻烦,又没有什么一劳永逸的办法,肯定是有的,而且还不止一种,本节就来说一下一劳永逸的配置OpenCV环境。

而且在不同的开发环境之下,有不同的操作方式:

比如:

(1)VS Code+MSVC编译器或者是GCC编译套件

由于VS Code没有那么强大的集成开发能力,编译器在编译的时候需要寻找头文件和库文件,所以,我们在配置的时候有两种手段,

  • 第一:在C++的配置文件c_cpp_properites.json中显示指定库文件和头文件的目录;
  • 第二:通过设置MSVC以及GCC编译所需要的环境变量来实现;

具体可以参见这两篇文章:

VSCode开发C、C++环境搭建系列(一)——基于Mingw-w64搭建

VSCode开发C、C++环境搭建系列(三)——基于MSVC搭建

后面会专门讲如何在VS Code中开发OpenCV程序。

 

3.1 Visual Studio2017配置永久OpenCV环境——通过 ***.vproj 配置文件

在我们配置完成一次OpenCV开发环境之后,比如我上面的一个实验项目project1,里面会产生一个配置文件,如下:

visualstudio使用opencv里的代码 vs如何使用opencv库_OpenCV环境永久配置的方法_06

我们看一下这个文件里面的内容,因为内容较多,我只显示部分如下:

......
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <IncludePath>D:\Program Files\Opencv4.1.1\opencv\build\include\opencv2;D:\Program Files\Opencv4.1.1\opencv\build\include;$(IncludePath)</IncludePath>
    <LibraryPath>D:\Program Files\Opencv4.1.1\opencv\build\x64\vc15\lib;$(LibraryPath)</LibraryPath>
  </PropertyGroup>
...
...
    <Link>
      <AdditionalDependencies>opencv_world411d.lib;%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
......

我们可以看见这就是我们添加的三个关键配置:包含目录、库目录、附加依赖项。

我们的opencv永久环境配置就是通过这个配置文件来实现的,具体在那么做。

(1)第一步:保存一个已经配置好的项目配置文件

将某一个已经配置好的OpenCV项目的  ***.vcproj  项目文件保存在我们常用的地方,我们需要将尝试用这个文件,不管是通过 “包含目录、库目录” 这种配置还是通过 “附加包含目录、附加库目录”  这种方式,保存的项目配置文件都是一样的使用方法,都可以通用。

(2)第二步:新建项目,导入保存好的配置文件

比如我现在新建了一个c++项目 project6,下面开始配置。

(a)打开“属性管理器”面板,“视图/其他窗口/属性管理器”。如下:

visualstudio使用opencv里的代码 vs如何使用opencv库_配置文件_07

 

visualstudio使用opencv里的代码 vs如何使用opencv库_Windows的OpenCV安装配置_08

绿色框是刚创建的项目名称,红色的是我们要配置的东西,我们要配置debug模式之下的x64位开发环境,

(b)在我需要配置的 Debug|x64 上面 “右击/添加现有属性表”。

这时候会打开文件浏览框,选择浏览所有类型的文件,然后将我们之前已经配置好的项目配置文件 ***.vcproj  配置文件导入即可。

然后会得到如下:

visualstudio使用opencv里的代码 vs如何使用opencv库_OpenCV环境永久配置的方法_09

这就表示已经配置完成了,然后执行下面的测试代码了。

3.2 手动配置一次   ***.props  配置文件

新建一个项目,打开 “属性管理器”面板,选中要配置的平台,即 Debug|x64.然后 “鼠标右击/添加新项目属性表”,

创建一个名称为 opencv4_1_1.props 项目属性文件,得到如下的一个文件:

visualstudio使用opencv里的代码 vs如何使用opencv库_VS2017配置opencv4.1.1_10

然后在这个文件上面 “右击/属性”,将前面的 2.1   2.2   2.3 依次配置一遍。这个opencv4_1_1.props 就配置完成了,

 

这个 配置文件 opencv4_1_1.props  就是我们需要经常使用的opencv配置文件,将其长期保存,每次创建opencv项目的时候导入这个 配置文件 opencv4_1_1.props 就可以了。

 

注意:

这里讲了两种通过保存配置文件的opencv配置方式

配置文件 ***.vcproj

配置文件 ***.props

倾向于使用第二种,因为在配置第二种的时候,我们发现像什么 平台、Windows SDK版本这些是没法配置的,只是单纯的配置OpenCV的库文件与头文件路径(即只执行上面的2.1   2.2   2.3这三步),而像2.4 是没办法配置的。而第一种配置文件是完全针对第一个项目而言的,可能还更改了目标平台以及WindowsSDK 等配置,所以容易出错。

综上所述,推荐使用第二种   配置文件 ***.props

到此,整个VS2017+OpenCV4.1.1的环境就配置完成了。

 

 

补充:另外还有关于微软符号服务器的配置,参见下面这篇文章