如何解决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窗口说明成功配置

相关推荐
AI的探索之旅11 小时前
97 个 OpenCV 实例(三十):双目立体,从标定到点云
人工智能·opencv·计算机视觉
小羊没烦恼!11 小时前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
伞伞悦读12 小时前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
C语言小火车13 小时前
C/C++ 为什么需要编译器?
开发语言·c++
霍霍的袁14 小时前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
词却14 小时前
OpenCV学习:CNN 人脸检测
opencv
孙启超14 小时前
【AI开发之Rust】第 11 课:智能指针与内部可变性
开发语言·后端·rust
此生决int14 小时前
深入理解C++系列(20)——C++11(下)
开发语言·c++
慧都小项15 小时前
当边缘AI上产线:QtitanDocking 如何让工业 HMI 实现多视图协同
人工智能·qt·ui·边缘计算·qt6.3
CoderYanger16 小时前
A.每日一题:835. 图像重叠
java·开发语言·程序人生·leetcode·面试·职场和发展·学习方法