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

相关推荐
秋916 分钟前
OceanBase与GreatSQL在Java应用中的性能调优方法有哪些?
java·开发语言·oceanbase
澈20719 分钟前
C++多态编程:从原理到实战
开发语言·c++
今天又在写代码27 分钟前
并发问题解决
java·开发语言·数据库
聆风吟º28 分钟前
【C标准库】深入理解C语言strcat函数:字符串拼接的利器
c语言·开发语言·strcat·库函数
带娃的IT创业者32 分钟前
深度解析:从零构建高性能 LLM API 中转网关与成本优化实战
开发语言·gpt·llm·php·高性能·成本优化·api网关
TechWayfarer44 分钟前
IP归属地运营商能解决什么问题?风控/增长/数据平台落地实践(附API代码)
开发语言·网络·python·网络协议·tcp/ip
Leon_Chenl1 小时前
【已开源】【嵌入式 Linux 音视频+ AI 实战项目】瑞芯微 Rockchip 系列 RK3588-基于深度学习的人脸门禁+ IPC 智能安防监控系统
深度学习·opencv·yolo·ffmpeg·音视频·边缘计算·人脸识别+检测
Alice-YUE1 小时前
【JS高频八股】什么是闭包?
开发语言·javascript·笔记·学习
微学AI1 小时前
Claude-Code-python 前端改造项目工作流程详解
开发语言·前端·python