超详细介绍:Windos下安装Visual Studio 2019,配置opencv2、3、4各版本环境以及image watch的使用(下面以opencv4.4.0为例)!!!
这里介绍了vs2019和opencv各个版本的下载方式及详细安装过程,以及每一步的安装过程原理,旨在记录自己的安装过程,也希望能帮助opencv环境安装过程中遇到困难的同学。另外,经测试,windows7和windows10的安装并无差别。下一篇打算记录linux下的安装过程。
一、Windos10安装Visual Studio 2019
首先下载VS2019下载器,推荐下载VS2019社区版,社区版是免费的VS2019下载地址:
这里我们选择第一个社区版下载,得到vs_Community。
下载完后点击安装:
完成后,选择使用c++的桌面开发:
再选择安装位置,若无法安装,可能的原因是以前安装过vs,可参考博客,即可解决。
若无法更改 下载缓存 和 共享组件、工具和 SDK 的路径,删除注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\Setup下的SharedInstallationPath项,即可。
网速快的话10分钟左右即可完成安装。
二、配置Opencv
1、Opencv下载及文件夹简介
首先下载opencv
,这里选择的是4.4.0版本,官网。
下载太慢的话可以从百度云网盘提取码:lywb
下载。
单击DownLoad,进入页面后等待5秒钟开始自动下载。
找到下载好的文件,双击安装(这其实是一个解压过程),选择解压目录,单击Extract
会在选中的路径下自动创建名字是opencv的文件夹。解压好的内容如下:
其中,build文件夹中是支持opencv使用的相关文件,而sources中为opencv的源代码及相关文件。如果仅仅是希望将opencv写的程序在电脑中跑起来并节省磁盘空间,可以删除sources文件(如无必要不要删除)。
进入到…\opencv\build\include 目录,可以看到opencv和opencv2这两个文件夹。opencv这个文件夹里面包含着旧版的头文件,opencv2这个文件夹里面包含着新版OpenCV2系列的头文件。注意:opencv4的include取消了opencv文件夹。
opencv_modules.hpp文件里面存放的是OpenCV2中与新模块构造相关的说明代码,打开可以发现其定义的是OpenCV2所有组件的宏:
#define HAVE_OPENCV_CALIB3D
#define HAVE_OPENCV_CONTRIB
#define HAVE_OPENCV_CORE
#define HAVE_OPENCV_FEATURES2D
#define HAVE_OPENCV_FLANN
#define HAVE_OPENCV_GPU
#define HAVE_OPENCV_HIGHGUI
#define HAVE_OPENCV_IMGPROC
#define HAVE_OPENCV_LEGACY
#define HAVE_OPENCV_ML
#define HAVE_OPENCV_NONFREE
#define HAVE_OPENCV_OBJDETECT
#define HAVE_OPENCV_OCL
#define HAVE_OPENCV_PHOTO
#define HAVE_OPENCV_STITCHING
#define HAVE_OPENCV_SUPERRES
#define HAVE_OPENCV_TS
#define HAVE_OPENCV_VIDEO
#define HAVE_OPENCV_VIDEOSTAB
然后每个宏都对应着模块,有兴趣的可以自己查看,OpenCV模块官网。
2、配置系统环境变量
接着来给电脑添加如下环境变量(需要根据自己的安装路径做相应修改):
D:\Install Document\opencv\build\x64\vc15\bin
变量值实际为bin文件夹的路径,x64表示运行环境为64位系统,vc15为编译环境为vs2015,注意:
虽然我们用的环境是vs2019,但解压处理的opencv文件夹内是vc10和vc15,因此我们选择vc15。
具体做法为:右击计算机,选择 属性–高级系统设置
选择环境变量:
选择系统变量(S)中的Path
,编辑:
把上面解压的路径复制进去:
3、在VS2019中配置Opencv
3.1 在VS2019中新建Opencv的工程
打开VS2019
,选择继续但无需代码,
打开以后,打开 文件->新建->项目
创建C++解决方案,如下图所示,选择空项目
输入项目名称以及项目的位置,单击创建:
修改x86
为行x64
:
注意:
这里选择下x86还是x64是一个令人困惑的问题。对于32位系统,必须选x86,但是对于64位系统,就不一定是选择x64了。其实它跟多少位系统没有什么直接的关系,而是在于编译程序时使用哪个编译器,编译器是win32就选x86,编译器是win64就选x64。因此64位系统既可以是编译器win64,也可以是win32,所以选两者皆可。这里我选择的是x64。
3.2 工程包含(include)目录的配置
为了避免每次新建工程都要重新配置,这里介绍一个一劳永逸的方法。
点击右上角工程名字,然后选择属性管理器,如没有属性管理器,点击左上角 视图–其他窗口–属性管理器:
右键单击工程名字,添加新项目属性表,更改自己需要的名字和保存路径(配置好保存,下次新建opencv
工程可以直接添加),
右键单击刚刚添加的项目属性表opencvDebug
,选择属性:
单击左侧VC++目录,首先修改包含目录,选中以后点击编辑单击文件夹标志新建,然后选择目录,添加如下图所示的两个变量,单击确定.
D:\Install Document\opencv\build\include\opencv2
D:\Install Document\opencv\build\include
D:\Install Document\opencv\build\include\opencv
//opencv4不需要添加
注意:因为前面说过opencv4的include取消了opencv文件夹,所以如果是4.几的版本则只需要添加两个,不确定的可以去include文件夹中看一下。
3.3 工程库(lib)目录的配置
重复上述过程,为库目录添加如下变量,单击确定
D:\Install Document\opencv\build\x64\vc15\lib
这里最好不要手动用键盘输入路径,而是去预览里面指定出来,因为路径不小心出错,可能在编译时出现LINK:fatal error LNK1104:无法打开文件“opencv_calib3d440.lib”
3.4 链接库的配置
还是接着上面的配置,在通用属性–链接器–输入–附加依赖项–编辑:
注意:
如果是opencv2的版本,需要添加19个带d的debug版lib(如opencv_ml249d.lib
)写在前面,19个不带d的release版lib(如opencv_ml249.lib
)写在后面,即优先支持debug模式。上述内容无需手动输入,可以去lib文件夹里找,也可以Google或者百度搜索“Opencv2.4.9配置”。
但是,对于openCV3和openCV4,则只需要添加opencv_world440d.lib
debug版或者opencv_world440.lib
release版即可(这里的440指的是opencv4.4.0版本,需要根据自己的版本更改),且修复了带d和不带d的区别而导致的错误,将带d的lib作为链接库,程序在运行时可以同时支持debug和release版代码正确运行,不会像opencv一样报字符串一场造成的内存错误。
下面以openCV4为例,这里我用debug版本,所以只添加带d的,添加一下lib(手动输入或者粘贴)opencv_world440d.lib
,单击确定,如下图:
最后点应用:
然后,右键单击opencvDebug
,选择保存:
会在一开始创建的路径下面保存一个opencvDebug.props
文件。
下次需要创建opencv
的工程时,就不需要再次配置opencv
所需要的环境了,右键单击工程名字添加现有属性类,直接选择opencvDebug.props
文件。
4 、运行测试程序(打开摄像头):
运行打开摄像头的程序:
#include <stdio.h>
#include "opencv2/highgui/highgui.hpp" //Opencv highgui模块头文件
#include "opencv2/opencv.hpp" //Opencv图像处理头文件
using namespace cv; //包含cv命名空间,省略cv::Mat等,直接用Mat
using namespace std; //包含std命名空间,cout函数,等于std::cout
//--------------------------------------【main主函数】----------------------------
int main(int argc, char* argv[])
{
VideoCapture capture(0);//从摄像头读入视频
//【2】循环显示每一帧
while (1)
{
Mat frame; //定义一个Mat变量,用于存储每一帧的图像
capture >> frame; //读取当前帧
imshow("读取视频", frame); //显示当前帧
waitKey(30); //延时30ms
}
return 0;
}
运行结果出现相机画面。
如果在运行程序的时候,出现“无法启动此程序,因为计算机中丢失opencv_core440d.dll.尝试重新安装程序以解决此问题。”
类似的错误,则有可能时因为环境变量配置不正确或者没有生效。
解决方法:可尝试再次配置系统环境变量后重启计算机,或者在windoes文件夹下加入OpenCV动态链接库,也就是将相关的.dll文件复制到windows操作系统的目录下。如果是32位系统放置的路径就是C:\Windows\System32,而64位系统,放置的路径为C:\Windows\SyWOW64。
三、安装Image Watch插件:
Image Watch是Microsoft Visual Studio的一个插件,可以在调试应用程序时可视化内存中的图像(例如,cv::Mat或IplImage_对象)。
vs2019社区版Image Watch
插件下载:百度网盘:提取码:hvs1
确保使用的是debug模式,并且在适当的位置(如上述测试代码的imshow("读取视频", frame);
处)设置的断点,调试运行至断点时即可激活image watch插件。如果没有显示Image Watch窗口,可以使用如下方法调用:菜单栏->视图->其他窗口->image watch,调出该插件。
Image Watch窗口左上角的单选按钮(Locals / Watch)选择下面的图像列表中显示的内容:Locals列出当前作用域中的所有OpenCV图像对象。 图像列表显示基本信息,例如宽度,高度,通道数,以及缩略图。单击该图像将在右侧的图像查看器中选择它以进行详细查看。 查看器允许平移(拖动鼠标)和缩放(鼠标滚轮)。 它还可以显示当前鼠标位置的像素坐标和色彩分量值,如下图所示。
在图像上使用滚轮操作实现缩放,放大到一定尺寸后将同时显示像素的BGR三个通道的值,如图所示:
右键单击缩略图菜单各项功能说明:
Expand All/Collapse All:
展开/全部折叠,展开/折叠当前列表中的所有项目
Expand New Items:
展开新项目,控制是否最初展开或折叠新列表项目
Large Thumbnails:
大缩略图,在两个缩略图大小之间切换
Auto Maximize Contrast:
自动最大化对比度,如果未选中,则使用标准颜色映射规则将像素值映射到显示颜色。如果选中,则当前像素数据的值范围将映射到整个显示颜色范围(如Matlab的imagesc)。注意:此设置适用于所有图像。
1-Channel Pseudo Color:
1通道伪彩色,如果未选中,则单通道图像显示为灰度。如果选中,则使用伪彩色图(如Matlab的colormap jet)。注意:此设置适用于所有图像。
4-Channel Ignore Alpha:
4通道忽略Alpha,如果未选中,则四通道图像中的最后一个通道被解释为alpha。如果选中,则忽略最后一个通道。
Add to Watch:
添加到监视,将所选项目添加到监视列表
Add Address to Watch:
添加要监视的地址,将所选项的地址添加到监视列表。这对于在不同堆栈帧上观看图像很有用。
Dump to File:
转储到文件,将所选图像转储到文件。支持的格式为PNG,JPG和BIN(Image Watch内部无损文件格式)。BIN文件仅适用于Image Watch;可以使用@file运算符将它们加载到监视列表中。