使用Pillow去除图像背景
安装依赖:
pip install pillow
实现步骤:
- 使用Pillow库加载图像,并将其转换为RGBA模式,以支持透明度。
- 遍历图像的每个像素,检查其红色、绿色和蓝色值是否都高于预设的阈值。
- 对于被视为白色的像素(即RGB值均高于阈值的像素),将其透明度设置为0(完全透明)。
- 对于非白色像素,保留其原始透明度值(或不改变其透明度,因为它们在原始图像中可能已经是部分透明或有其他透明度值)。
- 将修改后的图像保存为PNG格式,以保留透明度信息。
示例代码:
from PIL import Imagedef remove_image_bg_pil(input_path, output_path):img = Image.open(input_path)img = img.convert("RGBA")data = img.getdata()threshold = 240# 创建一个新的图片数据列表new_data = []for item in data:# 将背景颜色设置为透明,这里假设背景颜色为白色,RGB值为(255, 255, 255)if item[0] >= threshold and item[1] >= threshold and item[2] >= threshold:new_data.append((255, 255, 255, 0))else:new_data.append(item)# 更新图片数据img.putdata(new_data)img.save(output_path, 'PNG')
使用OpenCV去除图像背景
安装依赖:
pip install opencv-python
pip install numpy
实现步骤:
- 创建RGBA图像:将BGR图像转换为RGBA图像,初始时Alpha通道设置为全不透明(255)。
- 定义白色阈值:设置一个阈值,用于判断哪些像素是“白色”。
- 创建掩码:使用cv2.inRange函数创建一个掩码,将白色像素标记为0(透明),其他像素标记为255(不透明)。
- 反转掩码:使用cv2.bitwise_not函数反转掩码,只对白色像素进行透明处理。
- 应用掩码到Alpha通道:使用cv2.bitwise_and函数将掩码应用到Alpha通道,使白色像素的Alpha通道变为0(透明)。
示例代码:
import cv2
import numpy as npdef remove_image_bg_cv(input_path, output_path):# 读取图像img = cv2.imread(input_path)b, g, r = cv2.split(img)rgba = cv2.merge((b, g, r, 255 * np.ones(b.shape, dtype=b.dtype)))# 定义白色阈值white_threshold = 240# 创建一个掩码,将白色像素标记为0(透明),其他像素标记为255(不透明)mask = cv2.inRange(img, (white_threshold, white_threshold, white_threshold), (255, 255, 255))mask_inv = cv2.bitwise_not(mask)cv2.imwrite("output2/mask.png", mask_inv)# 将掩码应用到Alpha通道rgba[:, :, 3] = cv2.bitwise_and(rgba[:, :, 3], mask_inv)# 保存结果图像cv2.imwrite(output_path, rgba)