前言:我看了很多网上配置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 配置头文件所在的目录(包含目录/附加包含目录)
使用包含目录和附加包含亩均可以,二者的区别仅仅是搜索顺序不一样而已,参见我的前一篇文章,
这里就以包含目录为例子说明。
将下面两个目录添加进去到包含目录里面去:
即:
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中的库目录里面的一个静态库添加到附加依赖项,如下:
如下:
opencv_world411d.lib # 这个是调试专用的,多了一个字母d,表示debug,我们添加这个即可
opencv_world411.lib #下面这个是release版本的,
2.4 更改为 x64 平台
由于我们下载的均是64位的,所以需要配置一下,在两个地方都要更改,如下:
经过上面的 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;
}
运行结果为:
三、永久配置
上面就是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,里面会产生一个配置文件,如下:
我们看一下这个文件里面的内容,因为内容较多,我只显示部分如下:
......
<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)打开“属性管理器”面板,“视图/其他窗口/属性管理器”。如下:
绿色框是刚创建的项目名称,红色的是我们要配置的东西,我们要配置debug模式之下的x64位开发环境,
(b)在我需要配置的 Debug|x64 上面 “右击/添加现有属性表”。
这时候会打开文件浏览框,选择浏览所有类型的文件,然后将我们之前已经配置好的项目配置文件 ***.vcproj 配置文件导入即可。
然后会得到如下:
这就表示已经配置完成了,然后执行下面的测试代码了。
3.2 手动配置一次 ***.props 配置文件
新建一个项目,打开 “属性管理器”面板,选中要配置的平台,即 Debug|x64.然后 “鼠标右击/添加新项目属性表”,
创建一个名称为 opencv4_1_1.props 项目属性文件,得到如下的一个文件:
然后在这个文件上面 “右击/属性”,将前面的 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的环境就配置完成了。
补充:另外还有关于微软符号服务器的配置,参见下面这篇文章