You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

220 lines
5.8 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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 到可执行文件目录。