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

相关推荐
代码雕刻家1 小时前
C语言中fgets函数详解
c语言·开发语言
iナナ1 小时前
Java自定义协议的发布订阅式消息队列(二)
java·开发语言·jvm·学习·spring·消息队列
IMPYLH1 小时前
Lua 的 tostring 函数
开发语言·笔记·junit·单元测试·lua
c_h_o_i_c_e1 小时前
MATLAB 帮助文档设置内置浏览器【Web浏览器/内置浏览器】
开发语言·matlab
追烽少年x1 小时前
学习OpenCV(2)--- 图像基础容器Mat
opencv
橙序员小站1 小时前
Java 接入Pinecone搭建知识库踩坑实记
java·开发语言·人工智能
CHANG_THE_WORLD1 小时前
Python元组(Tuple)详解
开发语言·python
豆沙沙包?1 小时前
2025年--Lc313-662. 二叉树最大宽度--java版
java·开发语言
CoderYanger1 小时前
C.滑动窗口——2762. 不间断子数组
java·开发语言·数据结构·算法·leetcode·1024程序员节