Skip to content

Repository files navigation

stampcut-py

我平时会遇到一些合同、扫描件、截图,里面带圆形红章。我想做的事情很简单,就是把红章单独提出来,直接保存成透明背景 PNG,后面不管是归档、比对,还是继续做 OCR,都方便一点。

这个仓库就是我自己整理的一版 Python 脚本。

它做的事情也很直接:

  • 先把图片里的红色区域筛出来
  • 再去找圆形章的位置
  • 最后按圆裁出来,输出单独的 PNG

样例

仓库里放了一组样例图,我直接把结果放在这里:

sample

原图: examples/input/sample-document.png

提取结果: examples/output/stamp_1.png

安装

pip install -r requirements.txt

如果我想把它当成一个单独项目直接装,也可以:

pip install .

单张图片提取

最简单的用法:

python3 stampcut.py input.png -o stamps

如果我想保留章本身的颜色深浅,不把它重绘成统一纯红,可以这样跑:

python3 stampcut.py input.png -o stamps --preserve-source-color

默认输出文件会长这样:

stamps/stamp_1.png
stamps/stamp_2.png
...

代码里直接调用

from stampcut import extract_from_image, write_stamps

stamps = extract_from_image("input.png", preserve_source_color=True)
write_stamps(stamps, "stamps")

返回值是一个列表,里面每一项都是 RGBA 图片数据。

批量处理

我单独放了一个适合 Jupyter 用的批处理脚本:

stampcut_batch_jupyter.py

我一般就是直接改脚本顶部这几个配置:

INPUT_DIR = "input_images"
OUTPUT_DIR = "output_stamps"
RECURSIVE = False
OUTPUT_NAME_TEMPLATE = "{stem}-{index}.png"

这里的 OUTPUT_NAME_TEMPLATE 就是输出命名规则。

默认是:

图片文件名-1.png
图片文件名-2.png

比如:

contract.png

如果识别出两个章,输出就是:

contract-1.png
contract-2.png

如果我想改命名,也可以直接改模板,比如:

OUTPUT_NAME_TEMPLATE = "seal-{stem}-{index}.png"

那输出就会变成:

seal-contract-1.png
seal-contract-2.png

在 Jupyter 里我就直接这样跑:

%run stampcut_batch_jupyter.py

也可以导入函数:

from stampcut_batch_jupyter import extract_directory

extract_directory(
    input_dir="input_images",
    output_dir="output_stamps",
    recursive=False,
    output_name_template="{stem}-{index}.png",
)

处理流程

这套脚本本身没有绕太多弯,流程就是:

读取图片
  -> 转 HSV
  -> 按红色范围生成 mask
  -> 提出红章区域
  -> 转灰度并做高斯模糊
  -> HoughCircles 找圆
  -> 按圆心和半径裁成透明 PNG

常用参数

参数 默认值 说明
--color #ff0000 目标颜色
--hue-range 10 色相容差
--min-saturation 50 最低饱和度
--min-value 50 最低亮度
--preserve-source-color 关闭 保留原章本身颜色
--blur-kernel-size 5 圆检测前的模糊核大小
--blur-sigma 2.0 模糊 sigma
--scale-factor 1.2 裁剪时半径放大倍数
--hough-param1 200 HoughCircles 参数 1
--hough-param2 50 HoughCircles 参数 2

目录结构

stampcut-py/
  stampcut.py
  stampcut_batch_jupyter.py
  requirements.txt
  pyproject.toml
  README.md
  examples/
    input/
    output/
    preview.png

About

从文档图片里提取圆形红章,批量裁成透明 PNG。

About

从文档图片里提取圆形红章,批量裁成透明 PNG。

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages