2026-03-28 19:36:19 +08:00
2026-03-28 19:36:19 +08:00
2026-03-28 16:46:40 +08:00
2026-03-28 19:36:19 +08:00
2026-03-28 19:36:19 +08:00
2026-03-28 19:36:19 +08:00
2026-03-28 16:50:06 +08:00
2026-03-28 16:46:40 +08:00
2026-03-28 19:36:19 +08:00
2026-03-28 16:46:40 +08:00
2026-03-28 16:50:06 +08:00

图片去背景工具

用于书画、篆刻作品的去背景与去主体补背景脚本。

默认模式优先走书画专用前景提取逻辑:

  • 对墨色笔画做局部背景校正与明暗差分
  • 对印章做更严格的红色检测
  • 在粗掩码内进一步细化 alpha尽量减少字边残留底色
  • 仅在需要时才回退到 rembg

功能概览

  • 单张图片去背景,输出透明 PNG
  • 批量处理单层目录中的图片
  • 支持 artworkautorembg 三种前景提取模式
  • 支持 calligraphysealauto 三种书画类型
  • 支持 AOT-GAN 去主体补背景
  • 支持常见格式:jpgjpegpngbmpwebp
  • 安装 pillow-heif 后可读取 heic / heif

依赖

项目当前依赖见 requirements.txt

rembg[gpu]
pillow
pillow-heif
opencv-python

如果要使用 AOT-GAN 补背景,还需要额外安装 torch / torchvision,并准备 AOT-GAN 代码目录与权重文件。

环境准备

推荐使用现有虚拟环境:

source ~/venv/bin/activate

安装依赖:

pip install -r requirements.txt

如果你需要启用去主体补背景:

pip install torch torchvision

快速开始

处理默认 images/ 目录中的图片,结果输出到 output/

python remove_background.py

处理单张图片:

python remove_background.py input.jpg output.png

处理指定目录:

python remove_background.py my_images/ my_output/

指定为印章场景:

python remove_background.py input.jpg output.png --artwork-type seal

强制使用 rembg

python remove_background.py input.jpg output.png --foreground-mode rembg -m isnet-general-use

查看完整参数:

python remove_background.py -h

输出规则

  • 单张图片默认输出为 *_nobg.png
  • 处理目录时,输出文件写入你指定的输出目录
  • 脚本内置的目录批处理只扫描输入目录的第一层文件,不递归子目录
  • 如果启用 --remove-subject,输出文件名改为 *_bgfill.<原扩展>*_bgfill.jpg

前景提取模式

artwork

默认模式。优先适用于书法、国画、篆刻等纸本图像。

auto

先尝试书画专用掩码;如果结果明显不可信,再回退到 rembg

rembg

强制使用通用抠图模型。适合非书画类图片,或书画专用规则不适合的特殊样本。

书画类型

auto

自动兼容书法与印章。

calligraphy

更偏重墨色笔画、灰黑色文字。

seal

更偏重红章、篆刻印记。

常用参数

书画专用参数

  • --foreground-mode
  • --artwork-type
  • --artwork-max-size

建议:

  • 大图先尝试 --artwork-max-size 1600
  • 超大图如果速度较慢,可降低到 12001000
  • 红章较多的图片优先试 --artwork-type seal
  • 纯墨迹优先试 --artwork-type calligraphy

rembg 相关参数

这些参数只在 --foreground-mode rembgauto 回退到 rembg 时生效:

  • -m, --model
  • -a, --alpha-matting
  • -ft, --foreground-threshold
  • -bt, --background-threshold
  • -es, --erode-size
  • -p, --post-process

当前支持的 rembg 模型包括:

  • u2net
  • u2netp
  • u2net_human_seg
  • silueta
  • isnet-general-use
  • isnet-anime
  • birefnet-general
  • birefnet-general-lite
  • birefnet-portrait
  • birefnet-dis
  • birefnet-hrsod
  • birefnet-cod
  • birefnet-massive

去主体补背景参数

启用:

python remove_background.py input.jpg output.jpg --remove-subject --aot-pretrain experiments/your_model.pt

常用参数:

  • --aot-root
  • --aot-pretrain
  • --aot-device
  • --aot-block-num
  • --aot-rates
  • --aot-crop
  • --aot-crop-pad
  • --aot-max-size
  • --aot-noise-prefill
  • --aot-noise-strength
  • --mask-dilate
  • --mask-blur
  • --mask-threshold
  • --edge-grow
  • --save-mask
  • --black-subject
  • --black-threshold
  • --gray-subject
  • --gray-saturation-threshold
  • --gray-value-threshold
  • --feather
  • --feather-radius

一个偏保守的示例:

python remove_background.py "images/inpaint/IMG_9259 2.JPG" output.jpg \
  --remove-subject \
  --foreground-mode artwork \
  --artwork-type auto \
  --aot-pretrain experiments/G0000000.pt \
  --aot-crop \
  --aot-crop-pad 64 \
  --aot-max-size 900 \
  --aot-noise-prefill \
  --aot-noise-strength 1.0

典型用法

书法图去背景:

python remove_background.py input.jpg output.png \
  --foreground-mode artwork \
  --artwork-type calligraphy

印章图去背景:

python remove_background.py input.jpg output.png \
  --foreground-mode artwork \
  --artwork-type seal

通用图片走 rembg

python remove_background.py input.jpg output.png \
  --foreground-mode rembg \
  --model birefnet-general

调参建议

如果背景没有去掉:

  • 先尝试 --artwork-type calligraphy
  • 再尝试 --foreground-mode auto
  • 非书画图直接改用 --foreground-mode rembg

如果字边仍有底色:

  • 先确认原图是否有严重纸纹、阴影或压缩噪声
  • 降低 --artwork-max-size 可能更快,但通常不利于细节
  • 对超大图可以保留 1600,必要时单独抽样检查结果

如果去主体补背景不自然:

  • 开启 --aot-crop
  • 增加 --aot-crop-pad
  • 尝试 --aot-noise-prefill
  • 减小 --mask-dilate--mask-blur

校验命令

项目当前可用的检查命令:

~/venv/bin/python -m pytest -q
~/venv/bin/python -m mypy remove_background.py tests/test_remove_background.py
~/venv/bin/python -m ruff check remove_background.py tests/test_remove_background.py
~/venv/bin/python -m ruff format remove_background.py tests/test_remove_background.py

说明:

  • mypyruff 的项目配置见 pyproject.toml
  • images/output/ 已在静态检查配置里排除

已知限制

  • CLI 自带的目录批处理不递归子目录
  • 书画专用规则仍然可能受极端纸色、重阴影、扫描边框影响
  • 某些透明 PNG 在图片预览器里会显示白底或棋盘底,这是预览器合成效果,不代表 alpha 一定有问题

仓库结构

remove_background.py        主脚本
tests/test_remove_background.py
requirements.txt
pyproject.toml
images/                     输入样例
output/                     输出目录
experiments/                AOT-GAN 权重示例
Description
自动去除背景
Readme 257 MiB
Languages
Python 100%