win10下搭建qt+opencv环境


原本使用pyqt开发界面程序,但是pyinstall打包后的程序实在太大,我做了一个显示yuv图片的小界面程序,打包后的单文件竟然480Mb,真的好无语。。。

遂转向 qt+opencv,其开发环境搭建起来真的好费劲,也是折腾了好久才完成,以本文记录其过程。

  • info
    • qt-opensource-windows-x86-5.12.12
    • opencv-4.5.4
      • 截至当前时间,opencv最新版本是4.5.5,但是其Upgraded builtin protobuf from 3.5.2 to 3.19.1,由于其版本过新,而Qt 自带的mingw 7.3 不兼容,会编译报错,所以本次选择了opencv-4.5.4版本
    • cmake-3.22.1-windows-x86_64
  • Note
    • 后来者也可以折腾其他的版本搭配方案,一开始我想使用opencv-4.5.5,折腾好久都没能成功,里面有个protoc库的编译问题,望注意

1 qt

网上有好多qt的安装图示教程,这里不再赘述,QT5.14及以下建议在断网情况下安装,要不然还要输入qt 账号与密码,若不嫌繁琐的话,也可以使用联网安装。

QT安装包一般比较大,建议通过国内镜像网站下载

  • 清华大学:https://mirrors.tuna.tsinghua.edu.cn/qt/
  • 组件选择时
    • Qt5.12.12中,选择Mingw64
    • Developer and Designer中,勾选 Qt Creator 4.8.2 CDB、MinGW7.3.0 64-bit
  • 许可协议选择
    • 建议选,Qt installer LGPL协议
      • GNU常见的开源版权有两种,GPL和LGPL
      • GPL:通过修改GPL协议的code或者使用GPL软件的库,那么你所开发的软件必须遵循GPL,也就是说必须公开源代码
      • LGPL:通过修改LGPL协议的code,那么开发的软件必须遵循LGPL;但如果通过库的方式使用LGPL软件,则无需遵循LGPL。
  • Note
    • opencv中protoc高版本库在MinGW7.3.0下编译会报错的,在选择opencv版本时需三思

QT安装完成后,配置下环境变量,把如下目录加入path环境变量中

  • D:\ProgramFiles\Qt5.12.12\5.12.12\mingw73_64\bin
  • D:\ProgramFiles\Qt5.12.12\Tools\mingw730_64\bin
  • 需根据自己的实际情况配置

2 cmake

  • CMake下载地址:https://cmake.org/download/
  • 打开下载好的cmake-3.22.1-windows-x86_64.msi,可参考网上的步骤安装

3 opencv

  • OpenCV下载地址:https://opencv.org/releases/ 版本为opencv-4.5.4
  • 选择解压目录,解压,解压完成后软件会自动关闭
  • 使用CMake配置并编译OpenCV
    • 创建目录:vsopencv-4.5.4\output

    • 打开CMake

      • 输入OpenCV的源码目录和编译目录
        • D:\ProgramFiles\vsopencv-4.5.4
        • D:\ProgramFiles\vsopencv-4.5.4\output
    • 在这里插入图片描述
      在这里插入图片描述

    • 上图中步骤,本次编译64位程序

      1. opencv源码路径,D:\ProgramFiles\vsopencv-4.5.4
      2. opencv生成目录,D:\ProgramFiles\vsopencv-4.5.4\output
      3. 点击configure按钮,弹出窗口,配置Qt MinGW 编译器
      4. Finish后,选择gcc、g++所在路径
      5. 本地Qt 中gcc路径,D:\ProgramFiles\Qt5.12.12\Tools\mingw730_64\bin\gcc.exe
      6. 本地Qt 中g++路径,D:\ProgramFiles\Qt5.12.12\Tools\mingw730_64\bin\g++.exe
      7. 点击 Finish,结束编译器配置,并自动开始执行 configure 操作
    • configure配置

      • 勾选 WITH_QT
      • 勾选 WITH_OPENGL
      • 不勾选 WITH_IPP
      • 设置 CMAKE_BUILD_TYPERelease
      • 打开BUILD项,
        • BUILD_opencv_world: 将.lib或者.dll文件统一整合进一个world文件中,方便使用,若对大小太敏感的请不用勾选
        • BUILD_SHARED_LIBS: 生成动态链接库dll需要勾,静态不需要勾选
    • configure后会出现一片红,一片红就一个一个解决,不然后面的编译就失败,解完后,再去configure,直到没有红色条目出现为止

      • 【01】FFMPEG: Download failed: 35;"SSL connect error"

        • opencv会自动下载FFMPEG,而“https://raw.githubusercontent.com”再国内无法访问,若要继续下载,需要把下载链接中的https://raw.githubusercontent.com/ 替换为为https://raw.fastgit.org/
        • 修改文件,D:\ProgramFiles\vsopencv-4.5.4\3rdparty\ffmpeg\ffmpeg.cmake
        • 建议自己下载相关库,做替换,具体操作方法,推荐:FFmpeg或ippicv下载不成功的解决方案
      • 【02】CONFIGURATION IS NOT SUPPORTED: validate setupvars script in install

        • 搜索setup关键字,选择去除 OPENCV_GENERATE_SETUPVARS选项
      • 【03】CMakeFiles\opencv_python2.dir/objects.a(cv2.cpp.obj):cv2.cpp:(.text$initcv2+0x2bbe): undefined reference to '__imp_Py_InitModule4',解决方法有2个

        • 1)这里基本上用不到python,所以可以, I disabled python flag in cmake ( -DBUILD_opencv_python2=OFF)
        • 2)MS_WIN64 need to be add to C(XX)_FLAGS for mingw64 (-DMS_WIN64)
        • -DCMAKE_C_FLAGS_RELEASE=“-O3 -DNDEBUG -DMS_WIN64”
          -DCMAKE_C_FLAGS_MINSIZEREL=“-Os -DNDEBUG -DMS_WIN64”
          -DCMAKE_C_FLAGS_DEBUG=“-g -DMS_WIN64”
          -DCMAKE_C_FLAGS_RELWITHDEBINFO=“-O2 -g -DNDEBUG -DMS_WIN64”
          -DCMAKE_CXX_FLAGS_RELEASE=“-O3 -DNDEBUG -DMS_WIN64”
          -DCMAKE_CXX_FLAGS_MINSIZEREL=“-Os -DNDEBUG -DMS_WIN64”
          -DCMAKE_CXX_FLAGS_DEBUG=“-g -DMS_WIN64”
          -DCMAKE_CXX_FLAGS_RELWITHDEBINFO=“-O2 -g -DNDEBUG -DMS_WIN64” \

      • 【04】CMakeFiles\Makefile2:1561: modules/world/CMakeFiles/opencv_test_core.dir/all

        • 不勾选 WITH_WEBP
      • 【05】编译时去掉python的勾选

        • build中去掉 python 勾选
    • configure后且没有报err,即可进行generate操作

    • 在这里插入图片描述

    • 打开powerShell,进入目录D:\ProgramFiles\vsopencv-4.5.4\output

    • 执行mingw32-make.exe -j 16,这里编译的时间有点长,需耐心等待

      • Note,若Qt 把minGW32、minGW64 都加入系统环境变量中,那么这里编译时,有时候会报32位不兼容问题,那是因为mingw32-make.exe用成了minGW里面的那个,最后Qt 配置时先不配minGW32
    • 编译100%完成后,输入mingw32-make.exe install

    • 另外再将opencv加入环境变量,D:\ProgramFiles\opencv-4.5.4\x64\mingw\bin

    • 修改完环境变量后,记得重启电脑

4 demo

  • 创建Qt 项目
  • 修改文件mainwindow.cpp,内容如下
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    
    
    ui->setupUi(this);

    Mat image=imread("D:/test.jpg");
    namedWindow("Display window", WINDOW_AUTOSIZE );
    imshow("Display window", image );
}
  • 右键项目名词,选择添加库,选外部库

  • 在这里插入图片描述

    1. 选择libopencv_world454.dll.a所在路径,D:\ProgramFiles\opencv-4.5.4w\x64\mingw\lib\libopencv_world454.dll.a
    2. 头文件所在路径,D:\ProgramFiles\opencv-4.5.4w\include
    3. 一定要去掉勾选,因为我们编译出来的库只有一个libopencv_world454.dll.a
  • 会在untitled.pro文件中生成库的引用

  • 在这里插入图片描述

  • 右键项目名,构建运行,执行如下

  • 在这里插入图片描述

5 Q&A

5.1 qt安装vcredist_xx报错

  • 可使用 “360软件管家” 安装 “微软VC++运行库合集”,以此忽略 qt 的vcredist_xx安装

–end

猜你喜欢

转载自blog.csdn.net/tianzong2019/article/details/122609063