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.
5.8 KiB
5.8 KiB
Seal Processing - 印章处理模块
印章检测与处理的 C++ 模块,包含印章提取和边框移除功能。
环境要求
- CMake >= 3.10
- MinGW-w64 (通过 MSYS2 安装)
- OpenCV >= 4.0 (通过 MSYS2 安装:
mingw-w64-x86_64-opencv)
安装依赖(MSYS2)
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) 中运行:
cd "c:\Users\用户名\Desktop\Final project\c"
build.bat
或在 PowerShell 中运行:
cd "c:\Users\用户名\Desktop\Final project\c"
cmd /c .\build.bat
方法2:手动 CMake 编译(推荐)
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(印章提取)
功能
从图片中提取印章,输出裁剪后的印章图像。
运行命令
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(边框移除)
功能
对提取的印章进行边框移除处理。
运行命令
cd "c:\Users\用户名\Desktop\Final project\c\build"
.\test_remove_border.exe
测试说明
关于印章检测数据(det)
目前 C++ 程序不包含印章检测功能(即原 Python 项目 seal_ocr 中的 detect 部分)。
程序中使用的印章边框数据(det)是通过运行原 Python 项目获得后,在 C++ 代码中进行了硬编码设定。
如需使用自己的测试图片:
- 使用原 Python 项目 seal_ocr 运行图片,获取检测数据(det)
- 修改 C++ 测试文件中硬编码的 det 数据
- 重新编译并运行程序
各测试程序的差异
| 测试程序 | 处理范围 | 检测数据 | 说明 |
|---|---|---|---|
test_extract_seal.cpp |
多张图片 | 预设 1.png, 2.png | 自动扫描 image/ 目录,但仅对预设的图片有检测数据 |
test_remove_border.cpp |
单张图片 | 预设 1.png | 仅处理 1.png,需要手动修改代码中的图片路径和 det 数据 |
注意: 两个测试程序都预设了检测数据(det),如需处理其他图片,需要先使用原 Python 项目获取 det 数据,然后修改代码。
快速开始
# 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
解决: 用引号包围路径
cd "c:\Users\用户名\Desktop\Final project\c"
2. CMake 找不到 OpenCV
确保指定正确的 OpenCV 路径:
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 到可执行文件目录。