background-remover

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Background Remover

背景去除工具

Remove backgrounds from images using multiple detection methods.
通过多种检测方式去除图片背景。

Features

功能特性

  • Color-Based Removal: Remove solid color backgrounds
  • Edge Detection: Detect subject edges for removal
  • GrabCut Algorithm: Interactive foreground extraction
  • Batch Processing: Process multiple images
  • Transparency Output: Export with alpha channel
  • Background Replacement: Replace with color or image
  • 基于颜色的背景去除:移除纯色背景
  • 边缘检测:识别主体边缘以去除背景
  • GrabCut算法:交互式前景提取
  • 批量处理:同时处理多张图片
  • 透明输出:导出带Alpha通道的图片
  • 背景替换:用纯色或其他图片替换背景

Quick Start

快速开始

python
from background_remover import BackgroundRemover

remover = BackgroundRemover()
python
from background_remover import BackgroundRemover

remover = BackgroundRemover()

Simple removal

Simple removal

remover.load("photo.jpg") remover.remove_background() remover.save("photo_transparent.png")
remover.load("photo.jpg") remover.remove_background() remover.save("photo_transparent.png")

Remove specific color

Remove specific color

remover.load("product.jpg") remover.remove_color((255, 255, 255), tolerance=30) # Remove white remover.save("product_clean.png")
remover.load("product.jpg") remover.remove_color((255, 255, 255), tolerance=30) # Remove white remover.save("product_clean.png")

Replace background

Replace background

remover.load("portrait.jpg") remover.remove_background() remover.replace_background(color=(0, 120, 255)) # Blue background remover.save("portrait_blue.png")
undefined
remover.load("portrait.jpg") remover.remove_background() remover.replace_background(color=(0, 120, 255)) # Blue background remover.save("portrait_blue.png")
undefined

CLI Usage

命令行工具使用方法

bash
undefined
bash
undefined

Remove background (auto-detect)

Remove background (auto-detect)

python background_remover.py --input photo.jpg --output result.png
python background_remover.py --input photo.jpg --output result.png

Remove specific color

Remove specific color

python background_remover.py --input image.jpg --color "255,255,255" --tolerance 30 -o clean.png
python background_remover.py --input image.jpg --color "255,255,255" --tolerance 30 -o clean.png

Use GrabCut method

Use GrabCut method

python background_remover.py --input photo.jpg --method grabcut -o result.png
python background_remover.py --input photo.jpg --method grabcut -o result.png

Replace background with color

Replace background with color

python background_remover.py --input photo.jpg --replace-color "0,120,255" -o result.png
python background_remover.py --input photo.jpg --replace-color "0,120,255" -o result.png

Replace background with image

Replace background with image

python background_remover.py --input photo.jpg --replace-image bg.jpg -o result.png
python background_remover.py --input photo.jpg --replace-image bg.jpg -o result.png

Batch process

Batch process

python background_remover.py --batch input_folder/ --output-dir output/ --method edge
undefined
python background_remover.py --batch input_folder/ --output-dir output/ --method edge
undefined

API Reference

API参考

BackgroundRemover Class

BackgroundRemover类

python
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]
python
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]

Removal Methods

背景去除方式

Auto Detection

自动检测

python
undefined
python
undefined

Automatically choose best method

Automatically choose best method

remover.remove_background(method="auto")
undefined
remover.remove_background(method="auto")
undefined

Color-Based Removal

基于颜色的背景去除

python
undefined
python
undefined

Remove white background

Remove white background

remover.remove_color((255, 255, 255), tolerance=30)
remover.remove_color((255, 255, 255), tolerance=30)

Remove green screen

Remove green screen

remover.remove_color((0, 255, 0), tolerance=50)
remover.remove_color((0, 255, 0), tolerance=50)

Remove any solid color

Remove any solid color

remover.remove_color((200, 200, 200), tolerance=40)
undefined
remover.remove_color((200, 200, 200), tolerance=40)
undefined

Edge Detection

边缘检测

python
undefined
python
undefined

Use edge detection to find subject

Use edge detection to find subject

remover.remove_edges(threshold=50)
undefined
remover.remove_edges(threshold=50)
undefined

GrabCut (OpenCV)

GrabCut (OpenCV)

python
undefined
python
undefined

Full image GrabCut

Full image GrabCut

remover.grabcut(iterations=5)
remover.grabcut(iterations=5)

With bounding rectangle hint

With bounding rectangle hint

remover.grabcut(rect=(50, 50, 400, 300), iterations=10)
undefined
remover.grabcut(rect=(50, 50, 400, 300), iterations=10)
undefined

Background Replacement

背景替换

Solid Color

纯色背景

python
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
python
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

Image Background

图片背景

python
remover.remove_background()
remover.replace_background(image="office_bg.jpg")
python
remover.remove_background()
remover.replace_background(image="office_bg.jpg")

Transparent (Default)

透明背景(默认)

python
remover.remove_background()
remover.save("transparent.png")  # PNG preserves alpha
python
remover.remove_background()
remover.save("transparent.png")  # PNG preserves alpha

Edge Refinement

边缘细化处理

python
undefined
python
undefined

Soften edges with feathering

Soften edges with feathering

remover.refine_edges(feather=3)
remover.refine_edges(feather=3)

Expand mask to include more area

Expand mask to include more area

remover.expand_mask(pixels=2)
remover.expand_mask(pixels=2)

Contract mask for tighter crop

Contract mask for tighter crop

remover.contract_mask(pixels=2)
undefined
remover.contract_mask(pixels=2)
undefined

Example Workflows

示例工作流

Product Photography

产品摄影处理

python
remover = BackgroundRemover()
python
remover = BackgroundRemover()

Remove white studio background

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")
undefined
remover.load("product_photo.jpg") remover.remove_color((255, 255, 255), tolerance=25) remover.refine_edges(feather=2) remover.save("product_transparent.png")
undefined

Portrait Editing

人像照片编辑

python
remover = BackgroundRemover()
python
remover = BackgroundRemover()

Remove background from portrait

Remove background from portrait

remover.load("portrait.jpg") remover.grabcut(iterations=8) remover.refine_edges(feather=3)
remover.load("portrait.jpg") remover.grabcut(iterations=8) remover.refine_edges(feather=3)

Add professional background

Add professional background

remover.replace_background(color=(220, 220, 220)) remover.add_shadow(offset=(5, 5), blur=15) remover.save("portrait_professional.jpg")
undefined
remover.replace_background(color=(220, 220, 220)) remover.add_shadow(offset=(5, 5), blur=15) remover.save("portrait_professional.jpg")
undefined

Green Screen Removal

绿幕背景去除

python
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")
python
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")

Batch Processing

批量处理

python
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")
python
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")

Output Formats

输出格式

  • PNG: Preserves transparency (recommended)
  • WEBP: Smaller file, supports alpha
  • JPEG: No transparency (use with replace_background)
  • PNG:保留透明通道(推荐格式)
  • WEBP:文件体积更小,支持透明通道
  • JPEG:不支持透明通道(需配合背景替换功能使用)

Tips for Best Results

最佳使用技巧

  1. White/Solid Backgrounds: Use
    remove_color()
    method
  2. Complex Backgrounds: Use
    grabcut()
    method
  3. High Contrast Subjects: Edge detection works well
  4. Portraits: GrabCut with edge refinement
  5. Product Photos: Color removal with feathering
  1. 白色/纯色背景:使用
    remove_color()
    方法
  2. 复杂背景:使用
    grabcut()
    方法
  3. 高对比度主体:边缘检测方法效果更佳
  4. 人像照片:使用GrabCut配合边缘细化处理
  5. 产品照片:基于颜色的去除方式配合边缘羽化处理

Limitations

局限性

  • Best results with high contrast between subject and background
  • Complex hair/fur edges may need manual touch-up
  • Transparent or semi-transparent subjects are challenging
  • Very busy backgrounds may require manual assistance
  • 在主体与背景对比度高的场景下效果最佳
  • 复杂的毛发/绒毛边缘可能需要手动修正
  • 透明或半透明主体的处理难度较大
  • 过于杂乱的背景可能需要人工辅助

Dependencies

依赖库

  • pillow>=10.0.0
  • opencv-python>=4.8.0
  • numpy>=1.24.0
  • scikit-image>=0.21.0
  • pillow>=10.0.0
  • opencv-python>=4.8.0
  • numpy>=1.24.0
  • scikit-image>=0.21.0