OpenCV 学习笔记(1) - Windows系统安装OpenCV

OpenCV 学习笔记(1) - Windows系统安装OpenCV


本文较为啰嗦,有时间阅读详情的请按顺序阅读,若觉得只想看骨干部分请跳转至 第4节要点总结

1 系统说明

​ 以下安装教程均于Windows OS下完成,OpenCV官网的Tutorials是基于Windows 7 SP1完成,笔者写作此文时,微软已停止维护Windows7系统. 但笔者在Windows10上的安装方式并没有本质区别.

​ 官网提供两种安装方法:1)使用预编译库进行安装;2)使用源代码进行自主编译安装.

​ 其中,使用预编译库进行安装较为简单,但该方法只能在使用最新版的Microsoft Visual Studio开发环境时,才能工作. 不能发挥集成在OpenCV库中的先进功能.

2 使用预编译库进行安装

​ 笔者也比较小白,所以先尝试最简单明了的办法,即使用预编译库文件进行安装.

2.1 前往OpenCV官网下载预编译库文件

OpenCV下载地址传送门

在这里插入图片描述

​ 在此界面上可以看到目前可以下载的众多版本. 笔者尝了个鲜,下载了最新的版本. opencv-4.5.1

2.2 解压预编译库文件

​ 双击下载得到的exe文件,这是一个.7z格式的自解压文件,解压后得到一个文件夹. 该文件夹包含的就是当前版本的预编译库文件. 作为本机的运行库文件,建议将这个文件路径放置在非系统盘(因为该文件体积较大且没有要求一定要放在系统盘下).
在这里插入图片描述

2.3 设置系统的环境变量

​ 设置系统的环境变量也适用于使用源代码编译安装之后的情况。这里出于行文逻辑的考虑将该节置于此处。

​ 官网的环境变量设置说明可能对大多数小白来说有点迷惑,毕竟和我们通过系统控制面板设置环境变量的方式出入很大。这其中其实也只有两个不太熟悉的事物,一个是setx命令,一个是PathEditor环境变量配置工具。其实我们也完全可以绕过这两个方法,通过系统控制面板的方式来设置环境变量。只不过对于一个想成为极客的小白来说,愿意付出尝试,才是学习的正确姿势。

​ 先来介绍官网的设置方法,首先以管理员权限打开CMD,在命令行中输入以下内容(假设你的OpenCV解压在D:\OpenCV\路径下):

setx -m OPENCV_DIR D:\OpenCV\Build\x86\vc11     (suggested for Visual Studio 2012 - 32 bit Windows)
setx -m OPENCV_DIR D:\OpenCV\Build\x64\vc11     (suggested for Visual Studio 2012 - 64 bit Windows)
setx -m OPENCV_DIR D:\OpenCV\Build\x86\vc12     (suggested for Visual Studio 2013 - 32 bit Windows)
setx -m OPENCV_DIR D:\OpenCV\Build\x64\vc12     (suggested for Visual Studio 2013 - 64 bit Windows)
setx -m OPENCV_DIR D:\OpenCV\Build\x64\vc14     (suggested for Visual Studio 2015 - 64 bit Windows)
setx -m OPENCV_DIR D:\OpenCV\Build\x64\vc15     (suggested for Visual Studio 2017 - 64 bit Windows)

​ 注意这里的六行代码,只需要根据需要使用其中的一行即可,因为这些指令分别对应的是不同版本的IDE开发工具。笔者尝鲜使用的4.5.1版本包,只支持vc14和vc15,所以要求在配置的系统上至少有预先安装VS2015或VS2017.

​ 这一步用到了setx命令,这一命令的功能是设置一个可扩展的环境变量,在此例中,即以OPENCV_DIR表示后面的具体路径(如D:\OpenCV\Build\x64\vc15)。setx命令是Windows系统官方命令,可以在微软的官网上查到详细的说明,详情请看参考文献中的【2】注释。这一命令设置的是一个永久性质的环境变量,如果需要进行更改,则还应通过setx指令来完成,如果需要删除,则需要在控制面板里进行手动删除,而且要注意的是,这个变量如果进行了更改,则需要把使用这个变量的环境变量也进行手动刷新,因为它不会自动更新所有用到它作为扩展变量的环境变量。

​ 我想之所以会使用setx命令进行操作,最重要的一点是这个命令会写入注册表。另外一个好处就是当你更新OpenCV版本的时候,可以直接通过setx命令对这个环境变量进行快速替换。最重要的是,建立起来的环境变量可以让你在设置时少敲很多次路径。

​ 然后我们还需要用一个叫作PathEditor的工具,它是一个环境变量配置工具,可以在参考文献中【3】注释对应的网站进行下载。安装好之后,我们可以看到以下图标:

在这里插入图片描述

​ 这个图标看起来像某度的logo,不知道有没有什么关联。

​ 打开这个工具后你会发现,它是一个环境变量配置工具,从界面上看,与控制面板的环境变量配置界面很像,但是多出了一些快速处理的按钮,并且可以对注册表进行快速更改。从这个意义上说这个工具应该会有一些额外的优势。

在这里插入图片描述

​ 具体的做法是,在上述界面的上方框里的最后一条右键点击,可以看到Insert New Item的选项:

在这里插入图片描述

​ 点击新增一条记录:%OPENCV_DIR%\bin这样就把opencv的静态路径表给建好了。

如果你更换了OPENCV库的安装路径,或者你需要使用另一个版本的OPENCV库,则只需要使用setx命令对OPENCV_DIR环境变量进行修改覆盖即可。

2.4 在Microsoft Visual Studio中建立一个OpenCV项目

​ 我们解压的OpenCV库在Microsoft Windows操作系统中,它们在动态链接库(DLL)中。使用动态链接库的优点是,库的所有内容仅在运行时按需加载,并且无数程序可能使用相同的库文件。这意味着,如果你有10个应用程序使用OpenCV库,则无需为其中每个应用程序提供一个版本。当然,你需要在要运行应用程序的所有系统上安装OpenCV的dll。

​ 另一种方法就是使用具有lib扩展的静态库。可以使用源文件构建这些文件,如 Windows 安装教程中所述。使用此选项时,库将内置于exe文件中。因此,由于某种原因,用户不可能删除它们。作为一个缺点,应用程序将更大,并且,在它启动时将需要更多的时间来加载。

​ 使用OPENCV来编译应用,我们需要做两件事情:

  • 告诉编译器OpenCV库长得啥样。你需要通过使用头文件来做这件事。

  • 需要的时候,告诉链接器哪里能得到OpenCV的数据结构和函数结构。

    如果使用 lib 系统,则必须设置库文件的路径,并指定要查找其中一个文件。在生成过程中,链接器将查找这些库,并将所有使用函数和数据结构的定义和实现添加到可执行文件中。

    如果使用 DLL 系统,则必须再次指定所有这些,但是现在由于不同的原因。这是微软操作系统特定的东西。似乎链接器需要知道,在DLL的什么地方在运行时搜索数据结构或函数。此信息存储在 lib 文件中。然而,它们不是静态库。它们被称为导入库。这就是为什么当你在 Windows 中创建一些 DLL 时,您最终也会获得一些 lib 扩展库。好消息是,在运行时只需要 DLL。

​ 要将所有这些信息传递给 Visual Studio IDE,您可以全局执行(以便所有未来的项目都将获得此信息)或在本地(因此仅供您当前项目使用)。全局性的优势在于,你只需要做一次;但是,将所有项目与所有这些信息一起进行可能是不可取的。在全局的情况下,你如何做到这一点取决于你使用的VS版本。

​ Visual Studio 中项目的基本项是一个解决方案(Solution)。解决方案可能包含多个项目(Projects)。项目是应用程序的构建基块。每个项目将实现的东西,你将有一个主要项目,你可以把这个项目拼图。在许多简单的应用程序(如许多教程)的情况下,您不需要将应用程序分解为模块。在这些情况下,您的主项目将是唯一现有的项目。现在,通过浏览Files->New->Project菜单选择,在 Visual 工作室中创建一个新解决方案。选择 Win32 控制台应用程序作为类型。输入其名称并选择创建它的路径。然后在即将到来的对话框中,请确保创建一个空项目。

2.4.1 局部设置方法

​ 每个项目都是与其他项目分开构建的。因此,每个项目都有自己的规则包。在此规则包中存储 IDE 构建项目所需的所有信息。对于任何应用程序,至少有两种生成模式:一种是发布模式(Release),另一种是"调试模式"(Debug)。调试有许多功能存在,因此您可以在应用程序中查找和解决更简单的 Bug。相比之下,版本是一个优化的版本,其目标是使应用程序尽可能快地运行或尽可能小。您可能会认为这些模式还需要在生成期间使用不同的规则。因此,每种生成模式都有不同的规则包。这些规则包在 IDE 中作为项目属性调用,您可以使用属性管理器查看和修改它们。您可以使用View -> Project Pages(对于 2013 年以后的 Visual Studio,请转到View -> Other Windows -> Property Manager)。展开它,您可以看到现有的规则包(称为属性表Property Sheets)。

在这里插入图片描述

​ 这些真正有用的东西是,你可以创建一个规则包一次,你以后可以只是把它添加到你的新项目。创建一次,以后再重用。我们希望创建一个新的属性表,其中包含编译器和链接器需要知道的所有规则。当然,我们需要一个单独的调试和发布版本。从调试开始,如下图所示,右键“添加新项目属性表”:

在这里插入图片描述

​ 例如,使用OpenCV_Debug名称。然后通过选择工作表右键单击->属性。在下面的章节中,我将展示在本地设置 OpenCV 规则,因为我觉得没有必要用“我不使用它的自定义规则”污染项目。转到C++常规条目,并在 * “附加包含目录”* 下将路径添加到 OpenCV include中。如果没有 *“C/C++”*组,应向项目中添加.c.cpp/文件。

$(OPENCV_DIR)\..\..\include

​ 可以看到,这里方便地使用了前面设置好的环境变量值。

在这里插入图片描述

​ 接下来一步,转向链接器 -> 常规 -> 附加库目录,添加链接库文件的路径

在这里插入图片描述

​ 在“附加库目录”里添加以下:

$(OPENCV_DIR)\lib

​ 在 链接器 -> 输入 -> 附加依赖项中添加:

opencv_world451d.lib

​ 感谢opencv升级后的简化,如果是支持vc14以下的版本,需要添加如下:

opencv_calib3d300d.lib
opencv_core300d.lib
opencv_features2d300d.lib
opencv_flann300d.lib
opencv_highgui300d.lib
opencv_imgcodecs300d.lib
opencv_imgproc300d.lib
opencv_ml300d.lib
opencv_objdetect300d.lib
opencv_photo300d.lib
opencv_shape300d.lib
opencv_stitching300d.lib
opencv_superres300d.lib
opencv_ts300d.lib
opencv_video300d.lib
opencv_videoio300d.lib
opencv_videostab300d.lib

在这里插入图片描述
在这里插入图片描述

​ 库文件的命名格式是

opencv_(模块名)(版本号)d.lib

​ d 表示的是debug版本,表示这些是调试所需的库。现在单击"确定"以保存发布规则部分中的新属性并完成相同的操作。请确保省略库名称中的 d 字母,并保存属性表,上面带有保存图标。

​ OpenCV官方建议把这些属性表文件保存到特定的路径下面:

在这里插入图片描述

​ 当你需要新建一个OpenCV项目时,则可以直接把这些属性表添加到项目中去,这样省去了重复建立属性表的问题。

在这里插入图片描述

2.4.2 全局设置方法

​ 如果你觉得每次都需要添加属性表是一件很麻烦的事情,那么还有一种全局的设置方法将opencv库添加到所有的vs项目环境中,如下所示,可以在刚才建立的项目中找到一张表:

在这里插入图片描述

​ 这张表就是全局属性表,全局属性表里在通用属性->VC++目录->包含目录里加入OPENCV_DIR变量.(但我没这么加,下图你也能看到,因为我并不想所有的项目都采用这种懒人设置方法)

在这里插入图片描述

2.5 一个hello world

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
	if (argc != 2)
	{
		cout << " Usage: " << argv[0] << " ImageToLoadAndDisplay" << endl;
		return -1;
	}
	Mat image;
	image = imread(argv[1], 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;
}

​ 注意此程序需要一个输入参数,即打开图像的地址,可以直接在命令行中使用命令方式运行,或者在VS中设置函数的输入参数

在这里插入图片描述

​ 运行后的结果:

在这里插入图片描述

3 要点总结

​ OK,以上就是我们采用已编译好的安装包来配置OPENCV开发环境的一些内容,要点总结如下:

  • 下载并解压安装包
  • setx命令设置环境变量作为OpenCV库路径的缩写
  • 使用PathEditor设置环境变量(或者直接控制面板里设置)
  • 建立OpenCV项目,在项目中设置属性表,通过环境变量可以快速设置

4 参考文献

【1】OpenCV官网Tutorials之如何在Windows下安装OpenCV

【2】Windows Command 之 setx指令介绍

【3】PathEditor下载

【4】如何在Visual Studio中建立一个OpenCV项目

5 其他

​ Windows系统安装OPENCV还有一种方式是自己编译OPENCV库,需要自行下载gitbash和CMAKE工具,或通过源码,再行编译。这一部分内容也尝试踩坑,但是目前失败。失败的原因分析了一下,可能是编译时相应的版本需要相应的依赖环境。(笔者尝试时所用的环境中python已被升级到3.9版本,因此在编译库文件时总是会涉及到python版本错误,不知道这块是否对最后的失败构成了影响,总之是没有成功)此内容有待进一步尝试,特此说明。

​ 严格意义上说,采用自己编译的库的好处是,当新版本发布时,只需要重新编译,并重新配置环境变量即可。是一种比较geek的方法。笔者迟早还会再进行尝试,如果成功的话会再更新成博客作为本系列文章的补充。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值