QT6 Mingw-w64 opencv环境配置教程

安装环境

  • win10 64位
  • Qt-6.2.1
  • OpenCV-4.5.5
  • cmake-3.22.2
  • MinGW–W64 GCC-8.1.0 x86_64-posix-seh

首先安装QT6

QT6仅支持在线安装器安装,下载地址:QT6在线安装器

QT6 Mingw-w64 opencv环境配置教程_第1张图片

安装MinGW–W64

注意,这里必须安装64位即win64的Mingw,即mingw-w64 8.1.0,否则不支持thread,如果Mingw是32位的则编译时会报错,类似thread和mutex不能使用,如果出现类似错误,务必重新下载mingw-w64

下载地址:https://sourceforge.net/projects/mingw-w64/files/,不要点中间的download,网页继续往下拉,点这个下载:

QT6 Mingw-w64 opencv环境配置教程_第2张图片

注意文件名,不要下错了!

下载后解压即可,注意把bin文件夹添加PATH环境变量。

下载cmake

cmake是用来编译opencv的,下载地址:https://cmake.org/download/,如果你是windows64位,选择这个安装包下载

QT6 Mingw-w64 opencv环境配置教程_第3张图片

下载opencv

由于官网的windows版的opencv是使用vc编译器来编译的,并不适用与mingw编译器,因此需要我们自己来编译,首先进入官网下载opencv的source文件:https://opencv.org/releases/

QT6 Mingw-w64 opencv环境配置教程_第4张图片

编译opencv

下载后,将opencv文件解压到一个不含中文且不含空格的文件夹(否则编译时会报错),打开cmake-gui,下面根据自己需求这样填:

QT6 Mingw-w64 opencv环境配置教程_第5张图片

点击configure

image-20220203161002247

如果出现https_connection_error,则需要添加代理服务器:添加环境变量https_proxy,如果是socks5,则格式为socks5://127.0.0.1:10808。然后多次configure,不断修改直到红色项目全去掉。如果你是qt6的话,编译选项如下所示,注意WITH_QTWITH_OPENGL打上勾就可以了,test有关的可以去掉,根据你的路径适当修改:

QT6 Mingw-w64 opencv环境配置教程_第6张图片

编译时报错

点击generate,在build文件夹下执行命令mingw32-make -j8进行编译

QT6 Mingw-w64 opencv环境配置教程_第7张图片

编译过程中出现如下报错:

CMakeFiles\opencv_highgui.dir/objects.a(window_QT.cpp.obj):window_QT.cpp:(.text$_ZN14OpenGlViewPort12initializeGLEv+0xd): undefined reference to `__imp_glHint'
CMakeFiles\opencv_highgui.dir/objects.a(window_QT.cpp.obj):window_QT.cpp:(.text$_ZN14OpenGlViewPort8resizeGLEii+0xd): undefined reference to `__imp_glViewport'
CMakeFiles\opencv_highgui.dir/objects.a(window_QT.cpp.obj):window_QT.cpp:(.text$_ZN14OpenGlViewPort7paintGLEv+0xf): undefined reference to `__imp_glClear'

QT6 Mingw-w64 opencv环境配置教程_第8张图片

错误做法

分析后发现,报错的这几个变量都是gl开头,说明和opengl有很大关联,于是,我在cmake的standard libaray上加上了-lopengl32

image-20220203153202071

注意!!!这样虽然可以编译通过,但是QT在导库编译程序时会报错,直接crash,暂不知原因,可能是这样编译出来的库文件存在问题。

正确做法

编译到这里出错后,打开文件夹opencv-build\modules\highgui\CMakeFiles\opencv_highgui.dir

打开文件linklibs.rsp,这里加上-lopengl32,保存文件,返回根目录重新敲命令继续编译即可编译成功

QT6 Mingw-w64 opencv环境配置教程_第9张图片

QT6 Mingw-w64 opencv环境配置教程_第10张图片

安装opencv

使用命令mingw32-make install即可安装opencv,安装后默认会保存在编译根目录的build文件夹下

QT6 Mingw-w64 opencv环境配置教程_第11张图片

QT6 Mingw-w64 opencv环境配置教程_第12张图片

QT中使用opencv库

修改xxx.pro文件,格式如下:(这里我是QT控制台项目,所以没有GUI,不能imshow(),仅做测试)

QT -= gui

CONFIG += c++11 console
CONFIG -= app_bundle

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
        main.cpp

INCLUDEPATH += \
    "E:\ProgramData\opencv\opencv-build\install\include"

LIBS += -LE:\ProgramData\opencv\opencv-build\install\x64\mingw\lib \
        -lopencv_core455        \
        -lopencv_highgui455     \
        -lopencv_imgcodecs455   \
        -lopencv_imgproc455     \
        -lopencv_features2d455  \
        -lopencv_calib3d455
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

注意添加的INCLUDEPATHLIBS,这些文件都在你的编译的根目录的install文件夹下

教程到这里就结束了,断断续续研究了好几天,每个人遇到的问题可能都不一样,我遇到的这个编译的问题内外网都没有找到解决办法,是自己琢磨出来的,不过我的经历至少可以证明这个东西是肯定的可以搞成的,祝大家编译顺利吧!

你可能感兴趣的:(笔记,opencv,qt,c++)