如何解决Qt与OpenCV编译器不匹配问题

解决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\binC:\msys64\mingw64\bin)。
  • 将该路径添加到系统环境变量PATH中:
    • Windows 10/11 ‌:
      1. 右键"此电脑" → ‌属性 ‌ → ‌高级系统设置 ‌ → ‌环境变量‌。
      2. 在"系统变量"中找到Path,点击‌编辑 ‌ → ‌新建 ‌,粘贴MinGW的bin路径。
      3. 点击‌确定‌保存。
      4. 再次确认mingw32-make可执行

2、从Opencv官方Github下载源码

https://github.com/opencv/opencv

3、下载并安装CMake

https://cmake.org/download/

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,输入并回车

    bash 复制代码
    mingw32-make -j "你要使用的cpu核心数量"

    这里面的"你要使用的cpu核心数量"根据自己cpu情况填,假如是16核可以填16

  • 编译完成后输入

    bash 复制代码
    mingw32-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窗口说明成功配置

相关推荐
Tony Bai5 小时前
Go 语言的“魔法”时刻:如何用 -toolexec 实现零侵入式自动插桩?
开发语言·后端·golang
Coding茶水间5 小时前
基于深度学习的交通标志检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
开发语言·人工智能·深度学习·yolo·目标检测·机器学习
a努力。5 小时前
字节Java面试被问:TCP的BBR拥塞控制算法原理
java·开发语言·python·tcp/ip·elasticsearch·面试·职场和发展
jiaguangqingpanda6 小时前
Day24-20260120
java·开发语言·数据结构
m0_502724956 小时前
飞书真机调试
开发语言·前端·javascript
爱打代码的小林6 小时前
opencv基础(轮廓检测、绘制与特征)
人工智能·opencv·计算机视觉
橘子师兄7 小时前
C++AI大模型接入SDK—环境搭建
开发语言·c++·人工智能
lkbhua莱克瓦247 小时前
JavaScript核心语法
开发语言·前端·javascript·笔记·html·ecmascript·javaweb
bubiyoushang8887 小时前
基于MATLAB的近红外光谱与PLS方法测定药片有效成分含量的实现
开发语言·matlab
weixin_433179337 小时前
Hangman 猜字游戏使用列表List实现
开发语言·python