OpenCV 3.4.3+VS2017+Win10环境配置指南
Opencv+vs2017配置 ,记录一下。
下载安装 设置PATH
官网上的信息比较老,虽然坑,但也不是全错。起码下载、安装、设置PATH的部分还是正确的。
- 前往sourceforge页面,下载安装包。选择你需要的版本下载。
- 解压安装
-
设置环境变量
-
设置一个环境变量
OPENCV_DIR
,之后如果OpenCV重装到了另一个位置,只要改这个OPENCV_DIR
就可以了。打开命令行(管理员),运行命令
setx -m OPENCV_DIR E:\OpenCV\Build\x64\vc14
-
添加路径到PATH。
在桌面的“此电脑”上右键,选择“属性”,在左边一栏中找到“高级系统设置”,名为“系统属性”的对话框中选择“高级”->最下面的“环境变量”。“环境变量”中,可以看到“系统变量”。找到名为“PATH”的变量,双击进入编辑界面,点“新建”,输入
%OPENCV_DIR%\bin
,之后一路保存退出。
-
VS2017设置
这个部分官网的教程似乎过时了(毕竟是为老版本写的tutorial),网上大多数教程都在教你如何进行全局设置(所有项目,包括没有用到OpenCV的项目配置都被修改了)。这里介绍我窃以为最优雅的方式:对单个项目进行设置。
-
新建一个Project
-
找到“属性管理器”(我的VS2017Pro在右边,和“解决方案管理器”在一起)。如果找不到,选择“视图”->最下面“属性管理器”
-
设置Debug属性
在“属性管理器”中的Debug|x64中,新建一个property文件,不妨命名为
OpenCV_Debug.props
-
C/C++->常规->附加包含目录
$(OPENCV_DIR)\..\..\include
-
链接器->常规->附加库目录
$(OPENCV_DIR)\lib
-
链接器->输入->附加依赖项
opencv_world343d.lib;%(AdditionalDependencies)
其中,343是版本号
官网指南中,前两项是对的,最后一项不对。
-
-
设置Release属性
将上一步生成的
OpenCV_Debug.props
拷贝,拷贝后的副本文件改名为OpenCV_Release.props
- 在“属性管理器”的Release|x64中右键->“添加已有属性表”
- 选择
OpenCV_Release.props
并添加 - 在
OpenCV_Release.props
的设置中,将 链接器->输入->附加依赖项 的内容改为opencv_world343.lib;%(AdditionalDependencies)
比debug的配置要少一个“d”
-
保存,配置完成。今后,每当建立新的项目,只需拷贝此处生成的
OpenCV_Debug.props
和OpenCV_Release.props
文件到新的项目中,再在新项目的“属性管理器”中添加这两个.props文件即可。
测试
测试OpenCV,官方教程的程序需要输入参数,不然会报错。我在网上随便找了个程序:
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
using namespace cv;
int main()
{
Mat img = imread("test.jpg");
namedWindow("sample");
imshow("sample", img);
waitKey(0);
}
找一个图片文件,放在VS的项目文件夹下(和代码位于同一目录),将代码中的test.jpg
改为你的图片名称。选择Debug-x64,运行本地Windows调试器,不出意外即可顺利运行。
如果你对官方的测试代码情有独钟,那需要设置一下命令参数:
- 解决方案管理器->右键->属性->调试->命令参数,输入“图片文件名.拓展名”(不带引号)
- 选择Debug-x64,打开本地Windows调试器
附官方的测试代码
#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: display_image ImageToLoadAndDisplay" << endl;
system("pause");
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;
system("pause");
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;
}