原本使用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位程序
- opencv源码路径,D:\ProgramFiles\vsopencv-4.5.4
- opencv生成目录,D:\ProgramFiles\vsopencv-4.5.4\output
- 点击
configure 按钮,弹出窗口,配置Qt MinGW 编译器 - Finish后,选择gcc、g++所在路径
- 本地Qt 中gcc路径,D:\ProgramFiles\Qt5.12.12\Tools\mingw730_64\bin\gcc.exe
- 本地Qt 中g++路径,D:\ProgramFiles\Qt5.12.12\Tools\mingw730_64\bin\g++.exe
- 点击 Finish,结束编译器配置,并自动开始执行
configure 操作 -
configure 配置
- 勾选
WITH_QT - 勾选
WITH_OPENGL - 不勾选
WITH_IPP - 设置
CMAKE_BUILD_TYPE 为 Release - 打开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 -
【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
-
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 );
}
-
右键项目名词,选择添加库 ,选外部库 -
- 选择
libopencv_world454.dll.a 所在路径,D:\ProgramFiles\opencv-4.5.4w\x64\mingw\lib\libopencv_world454.dll.a - 头文件所在路径,D:\ProgramFiles\opencv-4.5.4w\include
- 一定要去掉勾选,因为我们编译出来的库只有一个
libopencv_world454.dll.a -
会在untitled.pro 文件中生成库的引用 -
-
右键项目名,构建 、运行 ,执行如下 -
5 Q&A
5.1 qt安装vcredist_xx报错
- 可使用 “360软件管家” 安装 “微软VC++运行库合集”,以此忽略 qt 的vcredist_xx安装
–end
|