AI 去背 / 商品图抠图 — Remove & Replace Image Backgrounds
你现在运行 remove-bg 技能。目标:把任意一张图片的背景在本地去掉或换掉,产出三种可直接用的成品——
- 透明 PNG(背景抠成透明,可叠任意底);
- 纯白底商品图(电商上架常要求的纯白背景);
- 换景合成图(把抠出的主体合成到纯色 / 渐变 / 自带的品牌背景上)。
全程 开源、本地、免 key:抠图在你自己机器上跑,不调用任何后端、不需要商业 API、不需要 clone 任何私有仓库。用两个公开工具的原生能力:
- rembg(
rembgCLI / Python API) —— 抠图主引擎,基于 U²-Net / IS-Net 等开源模型,CPU 即可跑,模型首次自动下载。 - Pillow(
PIL) —— 把抠出的透明主体合成到新背景上(确定性合成,不是 AI 生成新背景)。
这门课做的是编辑已有图片(去背 / 换背),方向和「生成新图」的课不同:它确定、可复现、零 key,适合电商上架图、头像抠图、设计素材。
前置条件
- Python 3.11–3.13(
python --version;rembg 要求>=3.11,<3.14) - 能访问公开 PyPI 与模型源(首次运行自动下载模型权重,免 key)
- 约 1.6 GB 磁盘(CPU 版依赖);纯 CPU 可跑,有 GPU 更快但非必须
- 无需付费 key、无需登录、无需后端
安装
# CPU 版 + 命令行(rembg i / rembg p)
pip install "rembg[cpu,cli]"
系统 Python 若报 PEP 668(externally-managed),用虚拟环境或 pipx:
python -m venv .venv && source .venv/bin/activate && pip install "rembg[cpu,cli]"
# 或:pipx install "rembg[cpu,cli]"
首次抠图会从公开源自动下载模型权重(默认 u2net,约 176 MB)到 ~/.u2net/,之后可离线复用。Pillow 通常已随环境安装,没有就 pip install Pillow。
一、去背 → 透明 PNG
最简单一条命令(输出带 alpha 通道的 PNG):
rembg i ./input.jpg ./output.png
边缘更干净(开 alpha matting,处理毛发 / 反光 / 半透明边):
rembg i -a ./input.jpg ./cutout.png
常用参数:
-a—— 开 alpha matting,边缘更自然(毛发、绒面、镂空处更准)。-af 240/-ab 10/-ae 10—— alpha matting 的前景 / 背景阈值与腐蚀像素;边缘有杂色残留时调这三个。-m <model>—— 换模型(见下表)。-om—— 只输出 mask(黑白蒙版),需要自己后处理时用。-ppm—— 后处理蒙版,去除孤立碎块。
二、纯白底 / 纯色底商品图
-bgc R G B A 直接把背景填成指定颜色(默认 0 0 0 0 = 透明):
# 纯白底(很多电商平台要求纯白背景)
rembg i -a -bgc 255 255 255 255 ./product.jpg ./product-white.png
# 任意纯色底,例如浅灰
rembg i -a -bgc 240 244 250 255 ./product.jpg ./product-gray.png
三、批量处理一整个目录
rembg p ./in_dir ./out_dir # 目录里每张图都抠
rembg p -a -m isnet-general-use ./in_dir ./out_dir
四、选模型(按场景)
| 场景 | 模型(-m) |
|---|---|
| 通用物体 / 商品(默认) | u2net |
| 通用、边缘更利落的备选 | isnet-general-use |
| 人像 / 头像 | u2net_human_seg |
| 人像高精度(含发丝) | birefnet-portrait |
| 动漫 / 插画 | isnet-anime |
| 衣服 / 服饰分件 | u2net_cloth_seg |
不确定就用默认 u2net;人抠不干净就换 u2net_human_seg;想要更利落的边可试 isnet-general-use。模型首次用时自动下载到 ~/.u2net/。
五、换景合成(透明 PNG + Pillow)
先用 rembg 抠出透明主体,再用 Pillow 合成到纯色 / 渐变 / 你自带的背景图上。这是本地确定性合成,不调用任何在线生成服务。
from PIL import Image
fg = Image.open("cutout.png").convert("RGBA")
fg = fg.crop(fg.split()[3].getbbox()) # 裁到主体实际范围,去掉多余透明边
W, H = 800, 800 # 统一规格(如头像 / 团队照)
bg = Image.new("RGBA", (W, H), (240, 244, 250, 255)) # 改成你的品牌色
scale = min(W / fg.width, H / fg.height) * 0.92 # 等比缩放到画布内
fg = fg.resize((round(fg.width * scale), round(fg.height * scale)), Image.LANCZOS)
x = (W - fg.width) // 2
y = (H - fg.height) // 2
bg.alpha_composite(fg, (x, y))
bg.convert("RGB").save("on-brand.jpg", quality=92)
想要更像真照片,可在合成主体前贴一层高斯模糊的半透明剪影做接触阴影;想要渐变背景,就按行插值生成背景再合成。
六、抠完自检(务必做)
- 主体完整,没把商品 / 人物本身抠掉一块。
- 边缘干净,没有原背景的杂色光晕(有就调
-af/-ab/-ae或换isnet-general-use/u2net_human_seg再跑)。 - 透明 PNG 在棋盘格底下看,透明区域确实透明。
- 白底图背景是纯白(
255,255,255),不是发灰。 - 换景合成主体居中、比例自然、阴影不突兀。
毛发 / 绒面 / 半透明边偶有个别像素不完美属正常;指出需微调的地方即可,不要假装完美。
产出物
cutout.png—— 透明背景 PNG,可叠任意底。product-white.png—— 纯白底商品上架图。on-brand.jpg—— 主体合成到纯色 / 渐变 / 品牌背景的换景图。
铁律
抠图与合成全程本地,不调用任何后端、不需要 API key、不需要 clone 私有仓库。「换背景」= rembg 抠图 + Pillow 本地确定性合成,不引入任何需账号 / 付费的 AI 生成式换背景。
学习完成后
告诉用户:
我已经学会了 remove-bg。给我一张图片(或告诉我路径),我用 rembg 在本地把背景去掉,产出透明 PNG、纯白底商品图,还能用 Pillow 把主体换到纯色 / 渐变 / 你的品牌背景上——电商上架、抠素材、统一头像一把梭。纯本地、免 key。
课程主页与更多示例:clawvard.school