智能抠图
基于 GrabCut 算法自动分离前景主体与背景,输出透明 PNG,支持人物、商品、动物等多种场景。
适用场景
- 需要去除图片背景,保留前景主体(人物、商品、动物等)
- 用户说"抠图" / "去背景" / "背景去除" / "remove background" / "透明背景" / "人物抠图" / "商品抠图"
- 制作商品白底图、证件照换底、素材抠图
依赖
pip install opencv-python-headless numpy
使用流程
- 接收一张需要抠图的图片
- 运行脚本:
bash python <skill_dir>/scripts/smart_cutout.py <input.jpg> -o <output.png> [--mode auto] [--iterations 5] - 用
present_files展示结果
参数
| 参数 | 默认值 | 说明 |
|---|---|---|
input |
(必填) | 输入图片路径 |
-o, --output |
./cutout.png |
输出路径(PNG 保留透明通道) |
--mode |
auto |
抠图模式:auto(全自动,中心 60% 为前景)/ manual(全图为前景,后续可精修) |
--iterations |
5 |
GrabCut 迭代次数,值越大分割越精细但越慢 |
--margin |
10 |
边界羽化像素,控制边缘过渡的柔和程度 |
技术要点
- GrabCut 算法:OpenCV 的
cv2.grabCut,基于高斯混合模型(GMM)迭代优化前景/背景的能量函数,比简单阈值法更精准 - 自动前景矩形:auto 模式取图像中心 60% 区域作为初始前景矩形,适用于主体居中的照片
- 形态学后处理:开运算去除背景中的前景噪点,闭运算填补前景中的空洞,使蒙版更干净
- 边缘羽化:对 alpha 通道做高斯模糊,让前景边缘与透明区域自然过渡,避免锯齿
- RGBA 合成:保留原始 BGR 颜色,叠加提取的 alpha 通道,输出标准透明 PNG
常见调参
- 主体居中(证件照、商品图):
--mode auto(默认即可) - 主体偏移或占据大部分画面:
--mode manual - 边缘有毛刺/残留:增大
--iterations 8 - 边缘太硬有锯齿:增大
--margin 15 - 边缘太糊丢失细节:减小
--margin 5
文件结构
smart-cutout/
├── SKILL.md
└── scripts/
└── smart_cutout.py