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

相关推荐
2601_949146538 分钟前
C语言语音通知接口接入教程:如何使用C语言直接调用语音预警API
c语言·开发语言
曹牧13 分钟前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
KYGALYX20 分钟前
服务异步通信
开发语言·后端·微服务·ruby
zmzb010326 分钟前
C++课后习题训练记录Day98
开发语言·c++
智驱力人工智能1 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
猫头虎1 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
YUJIANYUE2 小时前
PHP纹路验证码
开发语言·php
仟濹2 小时前
【Java基础】多态 | 打卡day2
java·开发语言
孞㐑¥2 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
Re.不晚2 小时前
JAVA进阶之路——无奖问答挑战2
java·开发语言