脚本如何去除图片背景

wen 实用脚本 35

本文目录导读:

脚本如何去除图片背景

  1. 使用 remove.bg API(最简单)
  2. 使用 rembg 库(本地处理)
  3. 使用 OpenCV (传统方法)
  4. 使用 TensorFlow DeepLab (深度学习)
  5. 批量处理脚本
  6. 安装依赖
  7. 使用方法建议

使用 remove.bg API(最简单)

import requests
def remove_bg_api(image_path, api_key):
    url = 'https://api.remove.bg/v1.0/removebg'
    with open(image_path, 'rb') as file:
        response = requests.post(
            url,
            files={'image_file': file},
            data={'size': 'auto'},
            headers={'X-Api-Key': api_key},
        )
    if response.status_code == 200:
        with open('output.png', 'wb') as out:
            out.write(response.content)
        return True
    return False
# 使用
remove_bg_api('input.jpg', 'YOUR_API_KEY')

使用 rembg 库(本地处理)

from rembg import remove
from PIL import Image
def remove_bg_rembg(input_path, output_path):
    with open(input_path, 'rb') as i:
        input_data = i.read()
        output_data = remove(input_data)
    with open(output_path, 'wb') as o:
        o.write(output_data)
# 安装:pip install rembg
# 使用
remove_bg_rembg('input.jpg', 'output.png')

使用 OpenCV (传统方法)

import cv2
import numpy as np
def remove_bg_opencv(image_path, output_path):
    # 读取图片
    img = cv2.imread(image_path)
    # 转换到HSV颜色空间
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    # 定义背景颜色范围(这里假设背景是白色)
    lower = np.array([0, 0, 200])
    upper = np.array([180, 30, 255])
    # 创建掩码
    mask = cv2.inRange(hsv, lower, upper)
    # 反转掩码(保留前景)
    mask = cv2.bitwise_not(mask)
    # 应用掩码
    result = cv2.bitwise_and(img, img, mask=mask)
    # 保存结果(PNG格式保留透明通道)
    cv2.imwrite(output_path, result, [cv2.IMWRITE_PNG_COMPRESSION, 0])
# 使用
remove_bg_opencv('input.jpg', 'output.png')

使用 TensorFlow DeepLab (深度学习)

import tensorflow as tf
import numpy as np
from PIL import Image
def remove_bg_deeplab(image_path, output_path):
    # 加载预训练模型
    model = tf.saved_model.load('deeplab_model')
    # 读取图片
    img = Image.open(image_path)
    img_array = np.array(img)
    # 预处理
    input_tensor = tf.convert_to_tensor(img_array)
    input_tensor = tf.expand_dims(input_tensor, 0)
    # 预测
    result = model(input_tensor)
    # 处理结果
    mask = result['semantic_map'][0]
    mask = np.array(mask)
    # 创建透明背景
    rgba = np.dstack((img_array, mask * 255))
    # 保存
    Image.fromarray(rgba).save(output_path)

批量处理脚本

import os
from glob import glob
from rembg import remove
def batch_remove_bg(input_folder, output_folder):
    # 创建输出文件夹
    os.makedirs(output_folder, exist_ok=True)
    # 获取所有图片
    for img_path in glob(os.path.join(input_folder, '*.[pj][np]g')):
        filename = os.path.basename(img_path)
        output_path = os.path.join(output_folder, f'no_bg_{filename}')
        with open(img_path, 'rb') as i:
            with open(output_path, 'wb') as o:
                o.write(remove(i.read()))
        print(f'Processed: {filename}')
# 使用
batch_remove_bg('input_images/', 'output_images/')

安装依赖

# 方法2
pip install rembg pillow
# 方法3
pip install opencv-python numpy
# 方法4
pip install tensorflow pillow numpy

使用方法建议

  1. 快速简单:使用 remove.bg API(需要网络和API密钥)
  2. 本地免费:使用 rembg 库(效果不错,速度较慢)
  3. 批量处理:使用批量脚本
  4. 特定背景:使用 OpenCV 方法(适合简单背景)

选择哪种方法取决于你的具体需求:是否需要联网、处理速度要求、背景复杂度等。

抱歉,评论功能暂时关闭!