vs2017 cmake opencv教程心得 以及在VS2017余QT5上的配置
这几天都在编译opencv,用cmake编译没报错,一用vs编译的时候就出问题,找不到"opencv_world.dll"文件,挺糟心的,现在把自己的教程写下来。
环境:
- vs2017
- opencv3.4
- contrib
- cmake3.10
1 下载所需的各种文件
vs什么的默认安装好了。
open官网:opencv
contrib:contrib链接
cmake:cmeke
当然你可以选择其他版本。
其中opencv实际就是个压缩包,contrib是个压缩文件,cmake可以选择msi安装文件,或则是zip绿色无安装文件。为安全使用,请不要放入中文路径。
将opencv,contrib放入同一个文件夹内,并新建一个空目录存放擦马克后的文件,我的是“msvc_2017”。
2. cmake编译
第一步实际是选择cmake的源代码路径和输出路径选择。看上图可以看到,我的源代码路径是“E:\Opencv\opencv3.4.0\opencv\sources”,也就是选择OpenCV解压后的sources文件夹,输出是自己新建的“msvc_2017”空文件夹。
第二步是点击configure配置一下,配置自己编译器,我的是VS2017 64位,选择的是“vs2017 Win64”再次点击configure配置一下。就会出现上图中的结果。有许多的红色,这些是需要配置的选项。这里我勾选了”BUILD_opencv_world",这个选项的目的是将生成链接文件打包成一个opencv_world,而不是许许多的链接库。这么做配置简单,缺点是会有些资源浪费。在这步,需要做些配置修改,比如说在“WITH”目录下勾选“WITH_OPENGL”、“WITH_CUDA”等。这里,将勾选的"WITH_CUDA"取消。
第三步然后再次点击configure配置一下,这步会对你在第二步做的选择进行一些设置,同时需要下载一些文件,所以有些慢。这么配置可以看需求更改。如果选择了些你没有安装的配置,比如你勾选了"WITH_CUDA"但是却没有安装CUDA,或者环境没配好,在这步很容易出错。
第四部是点击“Generate”生成对应的工程对象。也就是vs2017项目之类的。完成后的图如下:
注意:
不要在删掉输出目录文件后,再配置生成,没用的,会报错,最好的做法还是新生成一个输出目录。
在几次编译中,我用cmake生成都没有问题,但在vs2017中编译时,总是出现生成opencv_world文件无法连接到。在目录下搜索也根本找不到该dll文件。没有这个文件自然也就链接不上。这里建议不要选“CUDA”。貌似我就是勾选了就出问题。
3. 编译opencv.sln
可以在cmake里直接点击“open project”(generate右边),也可以在输出目录“mfvc_2017”下打开“OpenCV.sln”。
可以看到输出的项目里是没有“install”目录的。
先生成install 目录下的dll文件——>‘“opencv_world.dll”。在解决方案里的CMakeTargets里右键点击’‘INSTALL’’,选择“重新生成”,可以看到经过一段时间的编译后,目录下多了个“install”
而在install目录下是这样的;和opencv解压后的build类似里面包含了我们需要的库文件。
然后在选择ALL_BUILD。
全程无错,编译生成。
注意
- cmake配置是不要勾选“CUDA”,我的一勾选就卡主不动了
- 不要批生成,后果就是直接生成解决方案,找不到DLL文件,错误一堆。先INSTALL构建一下,生成所需的包,在全部生成。INSTALL构建完,后在目录下有“install”的文件夹
配置vs2017
这个其实不用多说,百度都有很多。
1)配置Path系统环境变量
此电脑–>右键“属性”–>高级系统设置–>环境变量–>新建:E:\opencv3.4.0\msvc2017_64\install\x64\vc15\bin (配置动态链接库)
2)包含目录 配置:
VC++目录—>包含目录:
E:\opencv3.4.0\msvc2017_64\install\include ;
E:\opencv3.4.0\msvc2017_64\install\include\opencv;
E:\opencv3.4.0\msvc2017_64\install\include\opencv2
3)库目录 配置:
VC++目录—>库目录:
E:\opencv3.4.0\msvc2017_64\install\x64\vc15\lib
4)链接器 配置:
链接器–>输入–>附加依赖项
opencv_world340.lib
opencv_world340d.lib
测试代码
#include<opencv2\core.hpp>
#include<opencv2\highgui.hpp>
using namespace cv;
int main()
{
Mat img = imread("D:\\datasets\\cat.jpg");
namedWindow("noticeable");
imshow("noticeable", img);
waitKey(6000);
return 0;
}
Qt5配置
使用PRI文件进行配置。
- 可以在任意位置新建一个pri文件,不过这里我在QT的安装目录下新建了一个opencv文件夹,在文件夹下新建了一个opencv.pri的文件。
- 打开文件(本身就是个文本文件),输入:
INCLUDEPATH += E:/opencv3.4.0/msvc2017_64/install/include
Debug:{
LIBS += -lE:/opencv3.4.0/msvc2017_64/install/x64/vc15/lib/opencv_world340d
}
Release:{
LIBS += -lE:/opencv3.4.0/msvc2017_64/install/x64/vc15/lib/opencv_world340d
}
注意修改自己的文件路径(cmake后的输出),我的在E盘,所以有3个E。
3. 新建一个Qt项目,注意选好编译器,msv2017 64bit这里我新建了一个mainwindow,结果如下:
打开pro文件,在文件最后添加:include(D:/Qt/Qt5.9.5/opencv/opencv.pri)
,也就是刚才创建的pri文件。
4. 在build(构建)中执行qmake。
5. 测试环境,打开main.cpp,修改为:
#include<QCoreApplication>
#include "opencv2/opencv.hpp"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
using namespace cv;
Mat img = imread("D:\\datasets\\cat.jpg");
imshow("Output",img);
return a.exec();
}
修改为自己的路径,出图。