解决Qt与OpenCV编译器不匹配问题
在Qt中想使用Opencv,可能会遇到编译器不匹配的问题,既Qt 用的是 MinGW 编译器,但从Opencv官网下载的是 MSVC 版本的 OpenCV,为了解决这个问题,可以这么做
1、打开终端(CMD或MinGW终端),运行以下命令,确认mingw32-make可执行:
bash
mingw32-make --version
若提示"不是内部或外部命令",说明PATH未正确配置,接着走下面步骤:
添加MinGW到系统PATH
- 找到MinGW的
bin目录(如C:\Qt\Tools\mingw1120_64\bin或C:\msys64\mingw64\bin)。 - 将该路径添加到系统环境变量
PATH中:- Windows 10/11 :
- 右键"此电脑" → 属性 → 高级系统设置 → 环境变量。
- 在"系统变量"中找到
Path,点击编辑 → 新建 ,粘贴MinGW的bin路径。 - 点击确定保存。
- 再次确认
mingw32-make可执行
- Windows 10/11 :
2、从Opencv官方Github下载源码
https://github.com/opencv/opencv
3、下载并安装CMake
4、配置CMake,这里假如我们使用的是4.12.0版本的Opencv
-
打开 CMake GUI。
-
Where is the source code → 指向
opencv-4.12.0源码目录。 -
Where to build the binaries → 建一个新目录,比如
C:\opencv412_build。 -
点击 Configure,选择生成器:
MinGW →
MinGW Makefiles -
选择Specify native compilers,会弹出这个界面

第一个选项"C",可以通过打开Qt,在选项的构建套件找到目录

第二个选项"C++"也在相同目录下面
-
选完了直接按Finish,此时会开始配置Makefile

-
配置完以后使用Search:
- 1、搜索WITH_OPENGL,勾选
- 2、搜索WITH_IPP,取消勾选
- 3、搜索ENABLE_PRECOMPILED_HEADERS,取消勾选
- 4、搜索WITH_QT,勾选
- 此时点击Configure,然后搜索QT,这个时候可能会有Qt6_DIR-NOTFOUND和QT_QMAKE_EXECUTABLE-NOTFOUND提示,Qt6_DIR可以手动指定,如:"E:/Qt/6.6.3/mingw_64/lib/cmake/Qt6",QT_QMAKE_EXECUTABLE可以手动指定,如:"E:/Qt/6.6.3/mingw_64/bin/qmake.exe"
- 然后再次点击Configure,这个时候可能会报红色
但是它默认情况会找到文件夹,这个时候再按Configure,不再报红色
-
如果要用
opencv_contrib,在OPENCV_EXTRA_MODULES_PATH填入opencv_contrib/modules。 -
勾选
BUILD_SHARED_LIBS=ON(生成 DLL),或者BUILD_SHARED_LIBS=OFF(生成静态库)。 -
点击 Generate。
-
找到刚刚Where to build the binaries中创建的新目录,在目录下面打开cmd,输入并回车
bashmingw32-make -j "你要使用的cpu核心数量"这里面的"你要使用的cpu核心数量"根据自己cpu情况填,假如是16核可以填16
-
编译完成后输入
bashmingw32-make install这个时候就安装好了
-
最后,配置系统变量,假如刚刚配置好的Opencv目录为"
C:\opencv412_build",那就把"C:\opencv412_build\bin"添加进去
在Qt验证是否能使用
这里展示qmake的
创建一个新的Qt project,在.pro文件中添加:
cpp
INCLUDEPATH += C:\opencv412_build/install/include
LIBS += C:\opencv412_build/lib/libopencv_*.a
main.cpp
cpp
#include "mainwindow.h"
#include <QApplication>
#include <opencv2/opencv.hpp>//包含opencv头文件
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
cv::Mat img = cv::imread("test.jpg");
if(img.empty()) {
qDebug() << "Image not found!";
return -1;
}
cv::imshow("Test", img);
cv::waitKey(0);
return a.exec();
}
这个时候找到main.cpp的目录


再进入这个目录,放入一张test.jpg文件

这个时候构建并运行qt程序,看到显示一个qt窗口和一个Opencv窗口说明成功配置