本文目录导读:

使用 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
使用方法建议
- 快速简单:使用 remove.bg API(需要网络和API密钥)
- 本地免费:使用 rembg 库(效果不错,速度较慢)
- 批量处理:使用批量脚本
- 特定背景:使用 OpenCV 方法(适合简单背景)
选择哪种方法取决于你的具体需求:是否需要联网、处理速度要求、背景复杂度等。