Files
chengnan/readme.md
luochen570 a5385e2c4b
Some checks failed
Build Windows Release / Windows x64 Release (MinGW + Qt + OpenCV) (push) Has been cancelled
Add Windows release CI
2026-05-31 12:58:55 +08:00

298 lines
8.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Qt + OpenCV 图像显示与处理
本工程使用 Qt Widgets 设计界面,使用 OpenCV 完成图像处理。程序支持打开图片、保存图片、另存图片,支持缩放、平移、旋转,并提供目标提取和简单图像分类功能。图像显示使用 Qt 的 `QLabel`/`QWidget`,没有使用 `cv::imshow`
## 文件说明
- `CMakeLists.txt`CMake 工程配置。
- `main.cpp`:程序入口。
- `MainWindow.h`:主窗口类和处理参数声明。
- `MainWindow.cpp`界面、图像读写、Qt 线程和 OpenCV 处理实现。
## 功能
- 打开图片:读取 `png/jpg/bmp/tif` 等常见格式。
- 保存图片:保存当前处理结果。
- 另存图片:将处理结果保存为新文件。
- 显示对比:左侧显示处理前图像,右侧显示处理后图像。
- 基本处理:缩放、水平平移、垂直平移、旋转。
- 目标提取使用灰度化、Otsu 阈值、形态学处理和轮廓检测提取前景目标,并用绿色矩形框标记目标。
- 图像分类:根据平均亮度和主色通道给出简单分类,同时显示目标数量。
- 线程处理:图像处理工作对象运行在 `QThread` 中,避免阻塞界面。
## Windows 构建说明
本工程使用 CMake 管理,目标是构建 Windows 桌面应用程序 `QtOpenCVImageTool.exe`。推荐使用 **MSVC 64 位**,因为 OpenCV 官方 Windows 预编译包通常就是 MSVC 版本,配置最省事。
构建时请保持三者一致:
- 编译器一致MSVC 对 MSVCMinGW 对 MinGW。
- 位数一致:建议全部使用 64 位。
- Qt、OpenCV、CMake 使用同一套构建环境。
如果使用 MSVC则不要混用 MinGW 版 Qt如果使用 MinGW则不要直接使用 OpenCV 官方 MSVC 预编译包。
### 需要安装的软件
1. Visual Studio 2022 或 Visual Studio 2022 Build Tools
安装时勾选:
```text
Desktop development with C++
MSVC v143 x64/x86 build tools
Windows 10 SDK 或 Windows 11 SDK
C++ CMake tools for Windows
```
安装完成后,系统中应能找到类似路径:
```text
C:\Program Files\Microsoft Visual Studio\2022\Community
C:\Program Files\Microsoft Visual Studio\2022\BuildTools
```
2. Qt for Windows
使用 Qt Online Installer 安装 Qt。推荐安装 Qt 6.x并勾选 MSVC 64 位组件,例如:
```text
Qt 6.6.x
MSVC 2019 64-bit 或 MSVC 2022 64-bit
Qt Creator
```
安装完成后Qt 路径通常类似:
```text
C:\Qt\6.6.0\msvc2019_64
C:\Qt\6.6.0\msvc2022_64
```
该目录下应存在:
```text
C:\Qt\6.6.0\msvc2019_64\lib\cmake\Qt6\Qt6Config.cmake
```
3. OpenCV for Windows
可以使用 OpenCV 官方 Windows 包。解压或安装到例如:
```text
C:\opencv
```
常见的 CMake 配置路径是:
```text
C:\opencv\build\x64\vc16\lib
```
该目录下应存在:
```text
C:\opencv\build\x64\vc16\lib\OpenCVConfig.cmake
```
4. CMake
如果安装 Visual Studio 时勾选了 CMake 工具,通常已经够用。也可以单独安装 CMake for Windows。命令行检查
```bat
cmake --version
```
### 推荐方式Qt Creator 构建
1. 打开 Qt Creator。
2. 选择“打开项目”,打开本目录的 `CMakeLists.txt`
3. 选择 Windows Kit例如
```text
Desktop Qt 6.x.x MSVC 2019 64-bit
Desktop Qt 6.x.x MSVC 2022 64-bit
```
4. 如果 CMake 找不到 OpenCV在 Qt Creator 的 CMake 配置项中添加:
```text
OpenCV_DIR=C:/opencv/build/x64/vc16/lib
```
5. 配置完成后点击“构建”。
6. 构建成功后会生成 `QtOpenCVImageTool.exe`
7. 在 Qt Creator 中点击“运行”即可启动程序。
### 命令行构建MSVC
打开开始菜单中的:
```text
x64 Native Tools Command Prompt for VS 2022
```
进入工程目录,例如:
```bat
cd /d D:\QtOpenCVImageTool
```
使用项目提供的脚本构建:
```bat
build_windows.bat C:\Qt\6.6.0\msvc2019_64 C:\opencv\build\x64\vc16\lib "Visual Studio 17 2022"
```
如果你的 Qt 是 MSVC 2022 版本,路径可改为:
```bat
build_windows.bat C:\Qt\6.6.0\msvc2022_64 C:\opencv\build\x64\vc16\lib "Visual Studio 17 2022"
```
也可以手动执行 CMake
```bat
mkdir build-windows
cd build-windows
cmake .. -G "Visual Studio 17 2022" -A x64 -DCMAKE_PREFIX_PATH=C:\Qt\6.6.0\msvc2019_64 -DOpenCV_DIR=C:\opencv\build\x64\vc16\lib
cmake --build . --config Release
```
MSVC 生成的 exe 通常位于:
```text
build-windows\Release\QtOpenCVImageTool.exe
```
### 命令行构建MinGW
如果使用 MinGW需要安装 MinGW 版 Qt并准备 MinGW 编译出来的 OpenCV。不要把 MSVC 版 OpenCV 直接给 MinGW 使用。
示例:
```bat
build_windows.bat C:\Qt\6.6.0\mingw_64 C:\opencv-mingw\install "MinGW Makefiles"
```
手动构建:
```bat
mkdir build-windows
cd build-windows
cmake .. -G "MinGW Makefiles" -DCMAKE_PREFIX_PATH=C:\Qt\6.6.0\mingw_64 -DOpenCV_DIR=C:\opencv-mingw\install
cmake --build . --config Release
```
MinGW 生成的 exe 通常位于:
```text
build-windows\QtOpenCVImageTool.exe
```
### 运行和发布
构建出来的 `QtOpenCVImageTool.exe` 运行时需要 Qt 和 OpenCV 的 DLL。开发阶段可以直接在 Qt Creator 中运行;如果要单独拷贝给别人运行,需要把依赖 DLL 一起放到 exe 目录。
MSVC Release 示例:
```bat
cd build-windows\Release
C:\Qt\6.6.0\msvc2019_64\bin\windeployqt.exe QtOpenCVImageTool.exe
copy C:\opencv\build\x64\vc16\bin\opencv_world*.dll .
```
如果 OpenCV 不是 `opencv_world*.dll`,则复制对应的 `opencv_*.dll` 到 exe 所在目录。
MinGW 示例:
```bat
cd build-windows
C:\Qt\6.6.0\mingw_64\bin\windeployqt.exe QtOpenCVImageTool.exe
copy C:\opencv-mingw\bin\opencv_*.dll .
```
### 常见问题
1. `Could not find Qt6`
说明 `CMAKE_PREFIX_PATH` 没有指向 Qt 安装目录。请确认路径类似:
```text
C:\Qt\6.6.0\msvc2019_64
```
2. `Could not find OpenCV`
说明 `OpenCV_DIR` 没有指向包含 `OpenCVConfig.cmake` 的目录。请搜索 `OpenCVConfig.cmake`,并把它所在目录传给 CMake。
3. 程序启动时报缺少 DLL
请运行 `windeployqt`,并把 OpenCV 的 DLL 复制到 exe 所在目录。
4. 链接时报 MSVC/MinGW 相关错误
通常是 Qt、OpenCV、编译器不匹配。MSVC 工程必须使用 MSVC 版 Qt 和 MSVC 版 OpenCVMinGW 工程必须使用 MinGW 版 Qt 和 MinGW 版 OpenCV。
## CI 自动构建和发布
仓库提供了 Gitea Actions 工作流:
```text
.gitea/workflows/build-windows-release.yml
```
触发方式:
- 推送到 `main` 分支。
- 推送 `v*` 标签,例如 `v1.0.0`
- 在 Gitea 页面手动运行 `workflow_dispatch`
CI 会在 Fedora 容器中安装 MinGW-w64、Qt6、OpenCV交叉编译 Windows x64 程序,然后打包:
```text
QtOpenCVImageTool-windows-x64-<version>.zip
QtOpenCVImageTool-windows-x64-<version>.zip.sha256
```
最后通过 Gitea API 上传到仓库 Release。为了允许上传 Release请在仓库的 Actions Secrets 中配置:
```text
RELEASE_TOKEN=<具有仓库 release 写权限的 token>
```
如果 Gitea 已经给 Actions 提供可写的 `GITHUB_TOKEN`,也可以不配置 `RELEASE_TOKEN`
发布版本建议使用 tag
```bash
git tag v1.0.0
git push origin v1.0.0
```
这样 Release 名称和包名会使用 `v1.0.0`。如果只是推送到 `main`CI 会创建预发布版本,名称类似 `build-提交哈希`
## WSL 中交叉编译 Windows 程序
WSL 里不能使用 Linux 版 Qt/OpenCV 直接生成 Windows exe必须准备 Windows 目标库。推荐使用 MinGW-w64 作为交叉编译器,并准备同为 MinGW-w64 目标的 Qt 和 OpenCV。
需要的组件:
- `x86_64-w64-mingw32-g++`
- Windows/MinGW 目标 Qt目录中应包含 `Qt6Config.cmake``Qt5Config.cmake`
- Windows/MinGW 目标 OpenCV目录中应包含 `OpenCVConfig.cmake`
构建脚本:
```bash
export QT_MINGW_PREFIX=/opt/mxe/usr/x86_64-w64-mingw32.shared/qt6
export OpenCV_DIR=/opt/mxe/usr/x86_64-w64-mingw32.shared/lib/cmake/opencv4
./build_wsl_windows.sh
```
如果使用的是自己编译或复制来的 Windows 目标 Qt/OpenCV把上面两个路径换成实际路径即可。
## 说明
本示例中的分类属于简单规则分类,适合作为课程作业演示:根据图像整体亮度判断“偏亮/偏暗/亮度适中”,根据 BGR 平均值判断主色。若需要更高精度分类,可替换为训练好的 OpenCV DNN 或传统机器学习模型。