对于我们这些初学者根本不care源码编译,也就不介绍了网上很多用cmake去编译opencv源码,有兴趣同学自己研究,这里只介绍简单又实惠的方法。这里下载的是4.6.0版本
解压完成后到build目录下可以看到opencv的头文件include和库文件
重要:将opencv动态库添加到环境变量中,这样使用就可以找到opencv的动态库,也可以放到系统目录下,反正是要告诉电脑我opencv dll库在哪里可以找到
也就是把D:\tools2\opencv\build\x64\vc15\bin这个目录加到系统环境变量中
使用vs2019创建一个cmake项目工程
在CmakeLists.txt中添加opencv头文件和库文件
代码:
#include "CMakeProject3opencv.h"
#include
using namespace std;
using namespace cv;
int main()
{
Mat m1(512, 512, CV_8UC3, Scalar(0, 255, 0));
imshow("m1", m1);
waitKey(0);
return 0;
}
结果:
可以看到后台有很多日志信息,其中也有些faild,不用管,因为这里拿的是dubeg版本,你也可以把上面的静态库换成opencv_world460.lib 不带d的release版本,就不会有这些打印信息了。代码生成了一块绿色画布,测试ok。
这里不在细说了,本人测试用的是qt5.12.12
https://download.qt.io/archive/qt/5.12/5.12.12/
直接把windows版本的exe下载下来,一路全选安装。网上很多参考,这里放一个
https://blog.csdn.net/qq_42257666/article/details/123285125
这里给的是一个错误的操作,但是是很多人遇到的,希望先看完整个过程,再去动手操作,过程很重要,只有这样你才能明白每一步都在干啥。
32 和 64的都选上,运行的时候根据自己的opencv可以选择
.pro 中配置opencv,类似CmakeList.txt
main.cpp
运行,不出意外会报错。
果然一堆错误,原因很简单,我们用的opencv版本是用vc去编译构建的,而刚才我们创建qt工程选择的是MinGw编译的。解决办法:
方法一:找一个MinGw编译的opencv
方法二:构建MSCV的qt工程
幸好还真能找到opencv MinGW的release版本,或者有能力的自己编译一个
链接:
https://github.com/huihut/OpenCV-MinGW-Build/releases/tag/OpenCV-4.5.5-x64
报错参考:
https://developer.aliyun.com/article/836818
下载请注意选择一定要和自己的qt版本对应
如下:
一定要关注MinGw版本和使用的32位还是64位。MinGw版本号最好和qt版本一致,本人试过和qt版本号不一致也行。但是编译使用的mingw32还是mingw64这个一定要和选择构建使用的MinGw64还是MinGw32一致。以下是楼主选择的版本
下载完之后,解压,同样要将动态库添加到环境变量中,也就是以下目录添加到环境变量中,方便程序能找到dll
D:\tools2\OpenCV-MinGW-Build-OpenCV-4.5.5-x64\x64\mingw\bin
重要:设置好环境变量一定要重启qt应用程序,一定要,不然环境变量在qt运行时不生效,程序会crash,楼主被这个坑了很长时间
新建工程和前面的一样,但是有一个位置需要注意
kits这个选项把四个都选上,如果你很熟练了只用选MinGw 32-bit,为什么呢?别忘了咱们opencv下载是MinGw32编译的因此必须用这个,这也是上面为什么强调opencv 编译用的mingw是32的还是64,不然程序必报错,报错类型如下。选择四个的好处是我们可以运行时随时切换,主要适合初学者。
.pro文件看下图,很清楚了,跟CmakeList很类似。里面的问题有人知道可以探讨一下
代码还是之前的代码,效果还是之前的效果
对了,还记得我们说过选择qt工程的编译器了吗?
我们在3.2.2中选择了4个kits,但是这里运行时只能选择一个,而且必须根据自己opencv构建的编译选择,楼上已经说了楼主用的Mingw32编译的,因此这里必须选择MinGw 32-bit的。到这里基本上已经搞定了opencv的配置。
在第1节中我们详细讲了vc编译的opencv下载与动态库的配置,完全按照第1.1和1.2配置即可,一定要把vc版的动态库添加到环境变量中,楼主是以下目录
D:\tools2\opencv\build\x64\vc15\bin
我们直接在3.2的基础上改一下就可以了,代码不用改,只用改.pro里面的配置,如下:
运行的时候切换到MSVC2017 64 bit,原因是此时我们用的是vc15编译的opencv,这里是不是忽然明白了很多。
运行结果和INFO信息都和我们第1节在vs2019中运行的一模一样
思考:那MinGW和VC编译的有什么区别吗?这个可以自己百度一下,大概意思就是VC适合windows, MinGw适合跨平台。还有就是有兴趣的同学可以自己去编译opencv,因为有时候适合自己的才是最好的。