本篇文章记录了安装OpenCV 3.4.2及配置VS2017的方法,以及利用CMake从源码编译适用于老版本VS2013的OpenCV 3.4.2的编译及配置流程(可选Contrib模块)。本文也可以作为其他OpenCV及VS版本安装配置方法的参考。
注:OpenCV的Contrib模块必须手动编译,请直接查看本文第3节“3 从源码编译并配置OpenCV”。
1 安装OpenCV 3.4.2
从OpenCV官网下载安装包:https://opencv.org/releases.html
双击安装:即解压文件到指定文件夹
注:安装程序会自动创建“opencv”文件夹
“sources”文件夹里面是源代码以及示例程序“samples”、文档“doc”等
“build”文件夹包含编译好的库文件,可以直接配置使用
在“build”文件夹内,“include”里面是头文件,“x64”文件夹里面是64位编译器生成的动态链接库文件(包括vc14,vc15版本)
注:vc10对应VS2010,vc11对应VS2012,vc12对应VS2013,vc14对应VS2015,vc15对应VS2017。
注:如果需要使用静态链接库或者在其他版本的VS中使用,则需要手动编译。
2 配置OpenCV 3.4.2 + VS2017
2.0 配置环境变量(重启电脑生效)
在系统桌面的“此电脑”图标上右击,依次选择“属性 - 高级系统设置 - 环境变量”
在下方的系统变量中找到Path变量,双击打开,添加OpenCV动态链接库的路径:
[OpenCV安装路径]\opencv\build\x64\vc15\bin
注:按照自己OpenCV实际的安装路径值替换上面的“[OpenCV安装路径]”字符串。
注:对于动态编译生成的可执行文件,其运行时需要依靠该环境变量找到“.dll”动态链接库文件所在地址进行函数和数据的动态调用。
注:可以设置仅用于该项目调试的环境变量。方法是在项目属性的调试项的环境子项编辑:
PATH=[DLL文件路径1];[DLL文件路径2]
然后需要对VS2017开发环境进行设置,使VS能找到调用OpenCV所需要的头文件和库文件。
2.1 永久生效的配置方法
这种配置方法对VS创建的所有项目都有效,并且所修改的配置文件会被不同版本的VS共用。
1. 用VS2017任意打开或创建一个C++项目,依次点击“视图”-“属性管理器(M)”
注:对于VS2013,依次点击“视图”-“其他窗口”-“属性管理器”
2. 在打开的属性管理器窗口中,展开“Debug|x64”节点,双击“Micorsoft.Cpp. x64.user”,打开全局属性的设置窗口:
2.1. 在左边选择“VC++目录”
在右边“包含目录”中添加OpenCV的头文件目录:
[OpenCV安装路径]\opencv\build\include
在右边“库目录”中添加OpenCV的链接库目录:
[OpenCV安装路径]\opencv\build\x64\vc15\lib
2.2. 在左边选择“链接器 - 输入”
在右边“附加依赖项”中添加OpenCV的库文件名:
opencv_world342.lib
opencv_world342d.lib
注:含后缀“d”代表Debug版本。
注:属性管理器窗口中的“Release|x64”节点的“Micorsoft.Cpp. x64.user”项同Debug节点项,不需要再次配置。
添加完成后,右击“Micorsoft.Cpp. x64.user”,选择“保存”即可。
2.2 单次生效的配置方法
这种配置方法只对当前所配置的项目有效。
依次点击“项目 - 属性”(或者在项目名称上右击,选择“属性”)
在打开的项目属性页进行“包含目录,库目录,附加依赖项”的配置,配置方法同前文2.1 永久生效的配置方法所述。
2.3 生成配置文件的配置方法(推荐)
这种配置方法创建配置文件并保存,每次只在需要OpenCV的项目中添加配置文件即可。
1. 在VS2017中任意打开或创建一个C++项目,依次选择“视图”-“属性管理器(M)”
2. 在属性管理器的“Debug|x64”项右击,选择“添加新项目属性表”
自行设定名称和路径(方便之后的OpenCV项目寻找使用),并点击”添加“(如:OpenCV3.4.2_VS2017_x64.props)
3. 双击“Debug|x64 - OpenCV3.4.2_VS2017_x64.props”
在打开的属性页进行“包含目录,库目录,附加依赖项”的配置,配置过程同前文2.1 永久生效的配置方法所述
配置完成后,右击“OpenCV3.4.2_VS2017_x64.props”,选择“保存”即可
然后,按下一条“4.”所述为该项目的“Release|x64”项添加刚才创建的配置文件,使该项目在Debug和Release模式下均可使用OpenCV库。
4. 之后创建OpenCV项目时,直接在“属性管理器”窗口的“Debug|x64”(以及“Release|x64”)项右击,选择“添加现有属性表”,找到之前保存的配置文件“OpenCV3.4.2_VS2017_x64.props”,并“打开”即可。
3 从源码编译并配置OpenCV
本节以编译并配置适用于VS2013的OpenCV 3.4.2为例。
注1:若需要联合编译Contrib模块,请首先下载对应OpenCV版本的Contrib模块源文件并解压:
https://github.com/opencv/opencv_contrib/releases
注2:编译Debug版本的OpenCV的Python接口时,需要“python[版本号]_d.lib”库文件。因此,在安装Python时应选择自定义安装选项并勾选安装其Debug组件(若之前没有安装,可以直接打开同版本的Python安装包,选择“Modify”进行附加安装)
1. 使用CMake从源码构建VS工程
首先安装CMake:https://cmake.org/download
1.1. 打开“cmake-gui.exe”程序
Where is the source code:填写OpenCV安装(解压)后的“sources”文件夹地址(包含CMakeLists.txt文件)
新建一个文件夹(如“[OpenCV安装路径]\opencv\opencv3.4.2_vs2013_x64”),用于存放CMake使用OpenCV源码构建的VS工程,将其路径填入Where to build the binaries
1.2. 点击配置“Configure”
选择Visual Studio 12 2013 Win64(如果选择Visual Studio 12 2013选项,则会构建Win32项目),然后点击“Finish”,CMake自动开始检测计算机环境、下载依赖项。
等待配置完成后(此过程受网络状况影响,可能时间较长),窗口的框内整个显示红色,此时可以对编译参数进行个性化配置:
注1:若要将以上所有库文件打包,生成单一的“world”库(使用方便,但文件较大),请勾选“BUILD_opencv_world”选项。
注2:若要联合Contrib模块编译,请在OPENCV_EXTRA_MODULES_PATH参数处粘贴本节开始时下载的Contrib源文件的modules文件夹路径。
或直接略过配置过程即可。
再次点击“Configure”,等待进度条完成且红色消失即表示配置成功。
1.3. 点击“Generate”
开始生成解决方案,下方的信息栏输出“Generating done”表示创建成功。
点击“Open Project”选择VS2013打开(或使用VS2013打开解决方案中的“.sln”文件),即可进入VS界面。
2. 在VS2013中编译生成库文件
2.1. 在Solution Explorer(解决方案资源管理器)中,右键“CMakeTargets/ALL_BUILD”,选择生成(Build)
完成之后,将在以下目录看到生成的动态链接库文件:
[OpenCV安装路径]\opencv\opencv3.4.2_vs2013_x64\bin\Debug
[OpenCV安装路径]\opencv\opencv3.4.2_vs2013_x64\lib\Debug
2.2. 右键“CMakeTargets/INSTALL”,选择生成(Build)
这是为了将所有的头文件和库文件集中到一起,便于管理和使用。
完成之后,将在以下目录看到库文件:
[OpenCV安装路径]\opencv\opencv3.4.2_vs2013_x64\install\x64\vc12\bin
[OpenCV安装路径]\opencv\opencv3.4.2_vs2013_x64\install\x64\vc12\lib
2.3. 将Debug模式修改为Release模式,重新执行上面两步2.1.和2.2.
3. 配置OpenCV与VS
3.1. 添加系统环境变量
按照前述2.0 配置环境变量添加以下环境变量:
[OpenCV安装路径]\opencv\opencv3.4.2_vs2013_x64\install\x64\vc12\bin
3.2. 属性配置
按照前述2.1或2.2或2.3配置以下内容:
包含目录:
[OpenCV安装路径]\opencv\opencv3.4.2_vs2013_x64\install\include
库目录:
[OpenCV安装路径]\opencv\opencv3.4.2_vs2013_x64\install\x64\vc12\lib
附加依赖项:
opencv_calib3d342.lib
opencv_calib3d342d.lib
opencv_core342.lib
opencv_core342d.lib
opencv_dnn342.lib
opencv_dnn342d.lib
opencv_features2d342.lib
opencv_features2d342d.lib
opencv_flann342.lib
opencv_flann342d.lib
opencv_highgui342.lib
opencv_highgui342d.lib
opencv_imgcodecs342.lib
opencv_imgcodecs342d.lib
opencv_imgproc342.lib
opencv_imgproc342d.lib
opencv_ml342.lib
opencv_ml342d.lib
opencv_objdetect342.lib
opencv_objdetect342d.lib
opencv_photo342.lib
opencv_photo342d.lib
opencv_shape342.lib
opencv_shape342d.lib
opencv_stitching342.lib
opencv_stitching342d.lib
opencv_superres342.lib
opencv_superres342d.lib
opencv_video342.lib
opencv_video342d.lib
opencv_videoio342.lib
opencv_videoio342d.lib
opencv_videostab342.lib
opencv_videostab342d.lib
注:请按照本机实际的安装路径进行配置。
注:以上的“附加依赖项”只针对“OpenCV 3.4.2”,其他版本的库名需要根据实际名称进行修改。
4 安装配置的测试
注:本篇文章前述安装及配置的都是“x64”版本的动态链接库。因此,调用OpenCV的VS2017工程应该设置为使用“x64”编译器进行编译:
VS2013创建的“Win32控制台应用程序”转为“x64”编译器的方法:
下拉编译器设置,选择“配置管理器”
在“活动解决方案平台”项下拉,选择“新建”,在“键入或选择新平台”处下拉,选择“x64”,点击确定。
1. 在已经配置OpenCV的VS项目中添加源文件,编码如下内容:
#include
#include
#include
using namespace std;
int main()
{
string windowName = "HelloWorld";
string imgName = "CR7.jpg";
cv::Mat image = cv::imread(imgName, CV_LOAD_IMAGE_COLOR);
if (!image.data)
{
cout << "无法打开图像文件!" << endl;
system("PAUSE");
return -1;
}
cv::namedWindow(windowName, CV_WINDOW_AUTOSIZE);
cv::imshow(windowName, image);
cv::waitKey(0);
return 0;
}
注:请将图片放入项目源文件所在文件夹,或者在程序中使用绝对路径。
2. 编译项目并运行,正确显示图像窗口: