113 lines
4.2 KiB
Markdown
113 lines
4.2 KiB
Markdown
# 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 编译运行
|
||
|
||
本工程用于构建 Windows 桌面应用程序。建议使用 Qt Creator 打开 `CMakeLists.txt` 构建,编译器可选择 MSVC 或 MinGW,但 Qt、OpenCV 和编译器位数必须一致,例如全部使用 64 位。
|
||
|
||
### 环境准备
|
||
|
||
1. 安装 Qt for Windows,推荐 Qt 6.x,并安装对应的 MinGW 64-bit 或 MSVC 64-bit 组件。
|
||
2. 安装 OpenCV for Windows,或自行用相同编译器编译 OpenCV。
|
||
3. 安装 CMake。Qt Creator 通常会自带可用的 CMake。
|
||
|
||
### Qt Creator 构建
|
||
|
||
1. 打开 Qt Creator。
|
||
2. 选择“打开项目”,打开本目录下的 `CMakeLists.txt`。
|
||
3. 选择 Windows Kit,例如 `Desktop Qt 6.x MinGW 64-bit` 或 `Desktop Qt 6.x MSVC 64-bit`。
|
||
4. 如果 CMake 找不到 OpenCV,在 CMake 配置中加入:
|
||
|
||
```text
|
||
OpenCV_DIR=C:/opencv/build/x64/vc16/lib
|
||
```
|
||
|
||
实际路径以你的 OpenCV 安装目录为准。MinGW 自编译 OpenCV 时,应填写包含 `OpenCVConfig.cmake` 的目录。
|
||
|
||
5. 点击“构建”并运行。
|
||
|
||
### 命令行构建示例
|
||
|
||
也可以直接使用项目提供的 `build_windows.bat`:
|
||
|
||
```bat
|
||
build_windows.bat C:\Qt\6.6.0\mingw_64 C:\opencv\build "MinGW Makefiles"
|
||
```
|
||
|
||
或 MSVC:
|
||
|
||
```bat
|
||
build_windows.bat C:\Qt\6.6.0\msvc2019_64 C:\opencv\build\x64\vc16\lib "Visual Studio 17 2022"
|
||
```
|
||
|
||
MinGW 示例:
|
||
|
||
```bat
|
||
mkdir build
|
||
cd build
|
||
cmake .. -G "MinGW Makefiles" -DCMAKE_PREFIX_PATH=C:\Qt\6.6.0\mingw_64 -DOpenCV_DIR=C:\opencv\build
|
||
cmake --build . --config Release
|
||
```
|
||
|
||
MSVC 示例:
|
||
|
||
```bat
|
||
mkdir build
|
||
cd build
|
||
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
|
||
```
|
||
|
||
### 运行和发布
|
||
|
||
在 Windows 上运行生成的 `QtOpenCVImageTool.exe` 时,需要能找到 Qt 和 OpenCV 的 DLL。调试阶段可在 Qt Creator 中直接运行;发布时可使用:
|
||
|
||
```bat
|
||
windeployqt QtOpenCVImageTool.exe
|
||
```
|
||
|
||
然后把 OpenCV 的运行库 DLL 一并复制到 exe 所在目录,例如 `opencv_world*.dll` 或相关 `opencv_*.dll`。
|
||
|
||
## 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 或传统机器学习模型。
|