Visual Studio 2019 & OpenCV 4.52 开发环境配置 (一劳永逸+原理解释)

Visual Studio 2019 & OpenCV 4.52 开发环境配置 (一劳永逸版)

0. 前言

笔者在配置OpenCV的过程中参考了不少资料,包括书籍和博客等。由于版本更迭导致配置方法略有差异,并且有些教程简略部分步骤,因此走了一些弯路。在此将配置过程记录下来,与大家分享,也方便自己日后查看。

本教程不仅会手把书教大家一步步配置,还会根据自己的理解,对每一步的操作,给出具体原因。

本教程开始前,笔者认为大家的VS2019 和 OpenCV 都已经安装或解压完成,未完成以上两个软件安装的,请先参考其他教程完成安装再进行下一步。

1. 添加环境变量(把OpenCV运行库加在C盘对应目录)

操作:
(1) 此电脑(win10)->右键->属性®->高级系统设置(左侧)->环境变量(右下角),进入到如下环境变量设置界面:
Visual Studio 2019 & OpenCV 4.52 开发环境配置 (一劳永逸+原理解释)_第1张图片
(2)双击上图中的Path,打开如下图环境变量编辑界面。按照图示步骤,添加OpenCV的bin目录。
(注意,这个版本的OpenCV解压包中已经不包含x86的32位文件,即,只有x64的64位文件。或许通过自己编译源文件可得32位文件,但笔者尚未尝试)。
Visual Studio 2019 & OpenCV 4.52 开发环境配置 (一劳永逸+原理解释)_第2张图片
备注:由图可知,我的OpenCV解压在“E:\Program Files\opencv\”目录下,环境变量要根据自己解压文件所在目录设置。

【本操作的目的】添加环境变量是为了把OpenCV软件运行所需要的库添加在“C:\Windows\System32”和“C:\Windows\SysWOW64”中,主要是一些**.dll文件,这样我们后期编写的软件在运行时就会依赖这两个文件夹中的库文件(动态库)。如果不添加环境变量,则每次新建一个OpenCV项目,都需要将所需库文件添加到项目的对应目录中(一般来说是*.exe文件所在*目录)。

【注意】完成本步骤后建议注销或重启一次计算机,让计算机把相关文件拷贝到上述C盘目录,然后再进行下面的步骤,否则环境变量的配置不会生效!!!

2. 在VS中配置(指定:头文件目录,lib库目录,lib库文件)

相信学习OpenCV的同学大概率是C++编程老手,但为了教程的完整性,仍然对每一步进行详述。
(1)首先新建一个C++空项目,点击下一步(新建空项目而不是其他项目,是为了不引入任何其他项目带来的繁琐配置)。
Visual Studio 2019 & OpenCV 4.52 开发环境配置 (一劳永逸+原理解释)_第3张图片

(2)项目目录以及项目名称随意指定即可,以为配置完成以后这个项目就没用了,可以删除。
Visual Studio 2019 & OpenCV 4.52 开发环境配置 (一劳永逸+原理解释)_第4张图片
(3)新建项目完成后,进入如下界面。在菜单栏,视图->其他窗口->属性管理器,打开属性管理器。
Visual Studio 2019 & OpenCV 4.52 开发环境配置 (一劳永逸+原理解释)_第5张图片
(4)如前所述,我们用的是x64的库文件,所以展开“Debug|x64”,选中步骤2所示属性表列表文件,右键,选择步骤3的“添加现有属性列表”。
Visual Studio 2019 & OpenCV 4.52 开发环境配置 (一劳永逸+原理解释)_第6张图片
(5)上一步后,跳到这个属性列表文件所在的目录(C:\Users\admin\AppData\Local\Microsoft\MSBuild\v4.0),由文件目录可知,这个文件是一个公用的文件,新建的项目默认都会使用这个文件。如果我们修改这个文件,可能会导致日后别的项目出现问题,因此我们复制一个“Microsoft. Cpp x64user. props”,重命名为“Microsoft.Cpp.OpenCV.x64d.user.props”,在项目中移除“Microsoft. Cpp x64user. props”,添加“Microsoft.Cpp.OpenCV.x64d.user.props”,这样我们后续的设置就会体现在这个文件中,后续新建项目后,也是移除默认配置列表文件,添加我们设置的新文件即可。
Visual Studio 2019 & OpenCV 4.52 开发环境配置 (一劳永逸+原理解释)_第7张图片
(6)在属性管理器中双击我们新添加的属性列表文件,即,“Microsoft.Cpp.OpenCV.x64d.user.props”。打开属性管理器,进行3项最后的设置:
1)如下图,添加包含目录,“E:\Program Files\opencv\build\include”和“E:\Program Files\opencv\build\include\opencv2”。其实“E:\Program Files\opencv\build\include”目录下没有文件,只有“E:\Program Files\opencv\build\include\opencv2”一个文件夹,包含它的原因是有些函数是通过“……\opencv2”索引的。不添加它的话编译的时候会在“……\opencv2\opencv2”下找对应的函数,这显然是不对的。这里可能有点绕,读者可以在环境单间完成后,返回来把“E:\Program Files\opencv\build\include”删除,看一下编译报错提示就明白了。
2)在库目录中添加“E:\Program Files\opencv\build\x64\vc15\lib”,也就是解压包库所在目录。
Visual Studio 2019 & OpenCV 4.52 开发环境配置 (一劳永逸+原理解释)_第8张图片
3)如下图,在链接器内添加如下两个文件(注意顺序。后面有字母d的表示debug版本,没有的表示relase版本,debug版本放在前面,表示优先调用——《毛星云版OpenCV3入门》)
opencv_world452d.lib
opencv_world452.lib
Visual Studio 2019 & OpenCV 4.52 开发环境配置 (一劳永逸+原理解释)_第9张图片
至此,环境已经配置完成,在解决方案资源管理器->源文件下,新建一个main.cpp,键入如下代码:
Visual Studio 2019 & OpenCV 4.52 开发环境配置 (一劳永逸+原理解释)_第10张图片

#include 
#include "opencv.hpp"

using namespace cv;

int main()
{
    Mat src = imread("D:/1-Practice/OpenCV/Data/Image/lenna.png"); //图片路径记得修改
    if (src.empty()) {
        std::cout << "image load fail" << std::endl;
        return 0;
    }
    imshow("test", src);
    waitKey(0);
    return 0;
}

注意:如果你的引用被标红,那很可能是编译设置错误,在工具栏改为 【【debug】【x64】】如下图:
在这里插入图片描述

3. 运行效果

Visual Studio 2019 & OpenCV 4.52 开发环境配置 (一劳永逸+原理解释)_第11张图片
如果未能成功编译或者运行错误,请检查图片路径是否错误(尤其是“/”和“\”的区别)。

4. 何谓一劳永逸

新建一个项目,新建main.cpp文件,把上述代码复制进去,发现引用被标红,原因是找不到这个文件。
Visual Studio 2019 & OpenCV 4.52 开发环境配置 (一劳永逸+原理解释)_第12张图片
其实在上面已经提到,需要在属性管理器中把默认的属性列表删除,添加我们自己定义的即可,见下图,不在标红,编译后完美运行。
Visual Studio 2019 & OpenCV 4.52 开发环境配置 (一劳永逸+原理解释)_第13张图片

5. 总结

(1)开发环境配置其实做了4件事情,环境变量添加(作用上面已经说明),添加头文件地址,添加库文件地址,指定库文件。
(2)我们新定义的属性列表文件,其实是记录了我们做的后面三件事。以文本形式打开这个属性列表文件,可以发现,这三件事分别是:

E:\Program Files\opencv\build\include\opencv2;E:\Program Files\opencv\build\include;$(IncludePath)
E:\Program Files\opencv\build\x64\vc15\lib;$(LibraryPath)
opencv_world452d.lib;opencv_world452.lib;%(AdditionalDependencies)

Visual Studio 2019 & OpenCV 4.52 开发环境配置 (一劳永逸+原理解释)_第14张图片

6. 后记

(1)在项目属性页(视图->属性页,或属性面板中打开),按照上面所述配置三个要素,也可以完成配置,但是只针对这个项目。新建一个项目后需要重新配置,不推荐这种方法。
(2)如前所述,大家一定不要修改默认的属性列表文件,而是新建一个然后修改。修改默认属性列表文件后,虽然新建项目以后不用再移除默认列表(因为用的就是默认本列表),以及添加新列表,但是代价就是某天你新建一个C++程序,本来不准备开发OpenCV的程序,OpenCV的库也被默认包含进来了,可能会导致不必要的麻烦。
Visual Studio 2019 & OpenCV 4.52 开发环境配置 (一劳永逸+原理解释)_第15张图片

你可能感兴趣的:(OpenCV,c++,visual,studio,opencv)