关于 background-remover
background-remover 是用于移除或替换图像背景的图像处理工具。它提供颜色抠除、边缘检测和 GrabCut 等方法,也支持批量处理及保留透明度的导出。
主要功能
- 01按颜色移除背景
- 02边缘检测与 GrabCut 抠图
- 03批量处理图像
- 04导出透明图像
- 05用纯色或图像替换背景
适用场景
- 01制作透明底产品照片
- 02抠取人像主体
- 03移除绿幕背景
- 04批量处理图像目录
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dkyazzentwatwa/ chatgpt-skills --skill background-remover安装后在 Claude Code 中输入/background-remover确认已加载。
附带文件scripts/background_remover.pyscripts/requirements.txt
详细介绍
背景移除器
使用多种检测方法移除图像背景。
功能
- 基于颜色移除:移除纯色背景
- 边缘检测:检测主体边缘并进行移除
- GrabCut 算法:交互式提取前景
- 批量处理:处理多张图像
- 透明输出:导出带有 alpha 通道的图像
- 背景替换:替换为颜色或图像
快速开始
from background_remover import BackgroundRemover
remover = BackgroundRemover()
# Simple removal
remover.load("photo.jpg")
remover.remove_background()
remover.save("photo_transparent.png")
# Remove specific color
remover.load("product.jpg")
remover.remove_color((255, 255, 255), tolerance=30) # Remove white
remover.save("product_clean.png")
# Replace background
remover.load("portrait.jpg")
remover.remove_background()
remover.replace_background(color=(0, 120, 255)) # Blue background
remover.save("portrait_blue.png")
CLI 用法
# Remove background (auto-detect)
python background_remover.py --input photo.jpg --output result.png
# Remove specific color
python background_remover.py --input image.jpg --color "255,255,255" --tolerance 30 -o clean.png
# Use GrabCut method
python background_remover.py --input photo.jpg --method grabcut -o result.png
# Replace background with color
python background_remover.py --input photo.jpg --replace-color "0,120,255" -o result.png
# Replace background with image
python background_remover.py --input photo.jpg --replace-image bg.jpg -o result.png
# Batch process
python background_remover.py --batch input_folder/ --output-dir output/ --method edge
API 参考
BackgroundRemover 类
class BackgroundRemover:
def __init__(self)
# Loading
def load(self, filepath: str) -> 'BackgroundRemover'
def load_array(self, array: np.ndarray) -> 'BackgroundRemover'
# Removal Methods
def remove_background(self, method: str = "auto") -> 'BackgroundRemover'
def remove_color(self, color: Tuple, tolerance: int = 20) -> 'BackgroundRemover'
def remove_edges(self, threshold: int = 50) -> 'BackgroundRemover'
def grabcut(self, rect: Tuple = None, iterations: int = 5) -> 'BackgroundRemover'
# Background Operations
def replace_background(self, color: Tuple = None, image: str = None) -> 'BackgroundRemover'
def add_shadow(self, offset: Tuple = (5, 5), blur: int = 10) -> 'BackgroundRemover'
# Refinement
def refine_edges(self, feather: int = 2) -> 'BackgroundRemover'
def expand_mask(self, pixels: int = 2) -> 'BackgroundRemover'
def contract_mask(self, pixels: int = 2) -> 'BackgroundRemover'
# Output
def save(self, filepath: str, quality: int = 95) -> str
def get_image(self) -> Image
def get_mask(self) -> Image
# Batch Processing
def batch_process(self, input_dir: str, output_dir: str,
method: str = "auto") -> List[str]
移除方法
自动检测
# Automatically choose best method
remover.remove_background(method="auto")
基于颜色移除
# Remove white background
remover.remove_color((255, 255, 255), tolerance=30)
# Remove green screen
remover.remove_color((0, 255, 0), tolerance=50)
# Remove any solid color
remover.remove_color((200, 200, 200), tolerance=40)
边缘检测
# Use edge detection to find subject
remover.remove_edges(threshold=50)
GrabCut(OpenCV)
# Full image GrabCut
remover.grabcut(iterations=5)
# With bounding rectangle hint
remover.grabcut(rect=(50, 50, 400, 300), iterations=10)
背景替换
纯色
remover.remove_background()
remover.replace_background(color=(255, 255, 255)) # White
remover.replace_background(color=(0, 0, 0)) # Black
remover.replace_background(color=(135, 206, 235)) # Sky blue
图像背景
remover.remove_background()
remover.replace_background(image="office_bg.jpg")
透明(默认)
remover.remove_background()
remover.save("transparent.png") # PNG preserves alpha
边缘优化
# Soften edges with feathering
remover.refine_edges(feather=3)
# Expand mask to include more area
remover.expand_mask(pixels=2)
# Contract mask for tighter crop
remover.contract_mask(pixels=2)
工作流示例
产品摄影
remover = BackgroundRemover()
# Remove white studio background
remover.load("product_photo.jpg")
remover.remove_color((255, 255, 255), tolerance=25)
remover.refine_edges(feather=2)
remover.save("product_transparent.png")
人像编辑
remover = BackgroundRemover()
# Remove background from portrait
remover.load("portrait.jpg")
remover.grabcut(iterations=8)
remover.refine_edges(feather=3)
# Add professional background
remover.replace_background(color=(220, 220, 220))
remover.add_shadow(offset=(5, 5), blur=15)
remover.save("portrait_professional.jpg")
绿幕移除
remover = BackgroundRemover()
remover.load("greenscreen_video_frame.jpg")
remover.remove_color((0, 255, 0), tolerance=60)
remover.replace_background(image="virtual_bg.jpg")
remover.save("composited.jpg")
批量处理
remover = BackgroundRemover()
processed = remover.batch_process(
input_dir="product_photos/",
output_dir="processed/",
method="color",
color=(255, 255, 255),
tolerance=30
)
print(f"Processed {len(processed)} images")
输出格式
- PNG:保留透明度(推荐)
- WEBP:文件更小,支持 alpha
- JPEG:不支持透明度(请搭配 replace_background 使用)
获得最佳效果的技巧
- 白色/纯色背景:使用
remove_color()方法 - 复杂背景:使用
grabcut()方法 - 高对比度主体:边缘检测效果很好
- 人像:使用 GrabCut 并优化边缘
- 产品照片:使用颜色移除并进行羽化
局限性
- 主体与背景对比度较高时效果最佳
- 复杂的头发/毛发边缘可能需要手动修饰
- 透明或半透明主体较难处理
- 非常杂乱的背景可能需要手动协助
依赖项
- pillow>=10.0.0
- opencv-python>=4.8.0
- numpy>=1.24.0
- scikit-image>=0.21.0
评论
支持 Markdown