Qt在windows下共有2个版本:mingw和msvc。其中mingw使用gcc编译器,msvc使用微软的VC编译器。针对不同版本Qt,使用Opencv的方式也不同。
区别
- msvc, 可以使用opencv-for-window中对应的vc编译版本;
- mingw,需要使用Qt的qmake和对应编译器,使用opencv源码进行编译;
mingw编译Opencv
环境
- 操作系统: windows10
- Qt版本: Qt5.8_mingw5.3.0 32bit
- Opencv版本: Opencv 3.10 Or 3.20
- cmake: cmake-gui 3.8.0
注: mingw编译器和Opencv版本需要对应,版本不对,配置过程难以完成。
编译过程
1.下载Opencv源码
2. 安装cmake并在Qt中找到cmake
3.打开CMakeList
文件
【Qt Creator】-【文件】-【打开文件或工程】- 找到源码中的makelist
文件并打开
弹出的配置窗口,选择编译配置环境为mingw
4. 配置cmake
进入项目,并选择release
等待Qt完成CMakeList
文件读取,在CMake选项中进行配置,设置编译结果导出位置,CMAKE_INSTALL_PERFIX
和BUILD_opencv_world
。前者设置编译输出结果位置,后者设置opencv最终结果为一个库文件。
配置完成以后,按下下方的Aplly按钮。
5. 配置构建选项
6. 开始构建
搭建开发环境
1. 添加头文件路径和库
在工程的.pro
文件中,设置头文件路径和头文件
INCLUDEPATH += D:/opencv/OpencvMingw/build/opencv-3.1/include
LIBS += D:/opencv/OpencvMingw/build/opencv-3.1/x86/mingw/lib/libopencv_*
2. 添加bin
到环境变量
在系统环境变量中添加bin
文件路径。
3. 简单图片显示
#include <QCoreApplication>
#include <QDebug>
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << "start";
cv::Mat im0 = imread("d://dlrb.png");
namedWindow("Qt OPENCV DEMO");
imshow("Qt OPENCV DEMO", im0);
waitKey(-1);
return a.exec();
}
问题
编译运行,报错并提示 exited with code -1073741510
,该问题主要是由于环境变量未生效造成的,将bin
目录下的dll
复制到可执行文件目录下即可。