|
|
# Seal Processing - 印章处理模块
|
|
|
|
|
|
印章检测与处理的 C++ 模块,包含印章提取和边框移除功能。
|
|
|
|
|
|
## 环境要求
|
|
|
|
|
|
- **CMake** >= 3.10
|
|
|
- **MinGW-w64** (通过 MSYS2 安装)
|
|
|
- **OpenCV** >= 4.0 (通过 MSYS2 安装: `mingw-w64-x86_64-opencv`)
|
|
|
|
|
|
### 安装依赖(MSYS2)
|
|
|
|
|
|
```bash
|
|
|
pacman -S mingw-w64-x86_64-toolchain
|
|
|
pacman -S mingw-w64-x86_64-cmake
|
|
|
pacman -S mingw-w64-x86_64-opencv
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 项目结构
|
|
|
|
|
|
```
|
|
|
Final project/
|
|
|
├── image/ # 测试图片目录
|
|
|
│ ├── 1.png
|
|
|
│ └── 2.png
|
|
|
│
|
|
|
└── c/ # C++ 项目目录
|
|
|
├── CMakeLists.txt # CMake 配置文件
|
|
|
├── build.bat # 一键编译脚本
|
|
|
├── README.md # 说明文档
|
|
|
│
|
|
|
├── common.cpp # 公共函数
|
|
|
├── common.h
|
|
|
├── image_utilities.cpp # 图像工具
|
|
|
├── image_utilities.h
|
|
|
│
|
|
|
├── extract_seal_main/ # 印章提取模块
|
|
|
│ ├── extract_seal_main.cpp
|
|
|
│ ├── extract_seal_main.h
|
|
|
│ ├── adjust_image.cpp
|
|
|
│ ├── adjust_image.h
|
|
|
│ ├── color_filter.cpp
|
|
|
│ ├── color_filter.h
|
|
|
│ ├── hsv_color.cpp
|
|
|
│ ├── hsv_color.h
|
|
|
│ ├── image_morphology.cpp
|
|
|
│ ├── image_morphology.h
|
|
|
│ └── test_extract_seal.cpp
|
|
|
│
|
|
|
└── remove_border/ # 边框移除模块
|
|
|
├── remove_border.cpp
|
|
|
├── remove_border.h
|
|
|
├── remove_border_main.cpp
|
|
|
├── remove_border_main.h
|
|
|
└── test_remove_border.cpp
|
|
|
```
|
|
|
|
|
|
**编译后生成的目录(不会被 Git 追踪):**
|
|
|
- `c/build/` - 编译输出目录,包含可执行文件
|
|
|
- `c/extract_seal_main/test_image/` - 印章提取测试输出
|
|
|
- `c/remove_border/test_image/` - 边框移除测试输出
|
|
|
|
|
|
---
|
|
|
|
|
|
## 编译
|
|
|
|
|
|
### 方法1:使用 build.bat(在 cmd.exe 中运行)
|
|
|
|
|
|
在 **命令提示符 (cmd)** 中运行:
|
|
|
|
|
|
```cmd
|
|
|
cd "c:\Users\用户名\Desktop\Final project\c"
|
|
|
build.bat
|
|
|
```
|
|
|
|
|
|
或在 **PowerShell** 中运行:
|
|
|
|
|
|
```powershell
|
|
|
cd "c:\Users\用户名\Desktop\Final project\c"
|
|
|
cmd /c .\build.bat
|
|
|
```
|
|
|
|
|
|
### 方法2:手动 CMake 编译(推荐)
|
|
|
|
|
|
```powershell
|
|
|
cd "c:\Users\用户名\Desktop\Final project\c"
|
|
|
mkdir build -ErrorAction SilentlyContinue
|
|
|
cd build
|
|
|
cmake .. -G "MinGW Makefiles" -DOpenCV_DIR="C:/msys64/mingw64/lib/cmake/opencv4"
|
|
|
cmake --build .
|
|
|
```
|
|
|
|
|
|
**注意:** 请将 `用户名` 替换为您的 Windows 用户名。
|
|
|
|
|
|
---
|
|
|
|
|
|
## 运行 test_extract_seal(印章提取)
|
|
|
|
|
|
### 功能
|
|
|
从图片中提取印章,输出裁剪后的印章图像。
|
|
|
|
|
|
### 运行命令
|
|
|
|
|
|
```powershell
|
|
|
cd "c:\Users\用户名\Desktop\Final project\c\build"
|
|
|
.\test_extract_seal.exe
|
|
|
```
|
|
|
|
|
|
### 程序会自动处理
|
|
|
|
|
|
**输入:**
|
|
|
- 从 `build/` 目录运行时,程序会扫描 `../../image/` 目录
|
|
|
- 即 `Final project/image/` 目录下的图片
|
|
|
- 支持格式:`.png`, `.jpg`, `.jpeg`, `.bmp`
|
|
|
|
|
|
**输出:**
|
|
|
- 自动保存在 `../extract_seal_main/test_image/` 目录
|
|
|
- 即 `Final project/c/extract_seal_main/test_image/` 目录
|
|
|
- 每个印章生成 3 个文件:
|
|
|
- `seal_{图片名}_{序号}_cropped.png` - 原始裁剪区域
|
|
|
- `seal_{图片名}_{序号}_ex_img.png` - 提取后的印章图像
|
|
|
- `seal_{图片名}_{序号}_adj_img.png` - 校正后的印章图像
|
|
|
|
|
|
### 关于检测数据
|
|
|
|
|
|
程序内部已预设了 `1.png` 和 `2.png` 的印章检测数据(det)。如需使用其他图片,请参考"测试说明"章节。
|
|
|
|
|
|
---
|
|
|
|
|
|
## 运行 test_remove_border(边框移除)
|
|
|
|
|
|
### 功能
|
|
|
对提取的印章进行边框移除处理。
|
|
|
|
|
|
### 运行命令
|
|
|
|
|
|
```powershell
|
|
|
cd "c:\Users\用户名\Desktop\Final project\c\build"
|
|
|
.\test_remove_border.exe
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 测试说明
|
|
|
|
|
|
### 关于印章检测数据(det)
|
|
|
|
|
|
目前 C++ 程序**不包含印章检测功能**(即原 Python 项目 seal_ocr 中的 detect 部分)。
|
|
|
|
|
|
程序中使用的印章边框数据(det)是通过运行**原 Python 项目**获得后,在 C++ 代码中进行了硬编码设定。
|
|
|
|
|
|
**如需使用自己的测试图片:**
|
|
|
1. 使用原 Python 项目 seal_ocr 运行图片,获取检测数据(det)
|
|
|
2. 修改 C++ 测试文件中硬编码的 det 数据
|
|
|
3. 重新编译并运行程序
|
|
|
|
|
|
### 各测试程序的差异
|
|
|
|
|
|
| 测试程序 | 处理范围 | 检测数据 | 说明 |
|
|
|
|---------|---------|----------|------|
|
|
|
| `test_extract_seal.cpp` | 多张图片 | 预设 1.png, 2.png | 自动扫描 `image/` 目录,但仅对预设的图片有检测数据 |
|
|
|
| `test_remove_border.cpp` | 单张图片 | 预设 1.png | 仅处理 1.png,需要手动修改代码中的图片路径和 det 数据 |
|
|
|
|
|
|
**注意:** 两个测试程序都预设了检测数据(det),如需处理其他图片,需要先使用原 Python 项目获取 det 数据,然后修改代码。
|
|
|
|
|
|
---
|
|
|
|
|
|
## 快速开始
|
|
|
|
|
|
```powershell
|
|
|
# 1. 进入项目目录
|
|
|
cd "c:\Users\用户名\Desktop\Final project\c"
|
|
|
|
|
|
# 2. 编译(使用 CMake)
|
|
|
mkdir build -ErrorAction SilentlyContinue
|
|
|
cd build
|
|
|
cmake .. -G "MinGW Makefiles" -DOpenCV_DIR="C:/msys64/mingw64/lib/cmake/opencv4"
|
|
|
cmake --build .
|
|
|
|
|
|
# 3. 运行印章提取测试
|
|
|
.\test_extract_seal.exe
|
|
|
|
|
|
# 4. 运行边框移除测试
|
|
|
.\test_remove_border.exe
|
|
|
```
|
|
|
|
|
|
**注意:** 请将 `用户名` 替换为您的 Windows 用户名。
|
|
|
|
|
|
---
|
|
|
|
|
|
## 常见问题
|
|
|
|
|
|
### 1. `cd` 命令报错:找不到路径
|
|
|
|
|
|
**原因:** 路径中有空格 `Final project`
|
|
|
|
|
|
**解决:** 用引号包围路径
|
|
|
```powershell
|
|
|
cd "c:\Users\用户名\Desktop\Final project\c"
|
|
|
```
|
|
|
|
|
|
### 2. CMake 找不到 OpenCV
|
|
|
|
|
|
确保指定正确的 OpenCV 路径:
|
|
|
```powershell
|
|
|
cmake .. -G "MinGW Makefiles" -DOpenCV_DIR="C:/msys64/mingw64/lib/cmake/opencv4"
|
|
|
```
|
|
|
|
|
|
### 3. 编译失败
|
|
|
|
|
|
检查:
|
|
|
- MinGW-w64 是否已正确安装
|
|
|
- 环境变量 PATH 是否包含 `C:\msys64\mingw64\bin`
|
|
|
|
|
|
### 4. 运行时找不到 DLL
|
|
|
|
|
|
将 `C:\msys64\mingw64\bin` 添加到系统 PATH,或复制相关 DLL 到可执行文件目录。
|