以下是一个基本的步骤概述和代码示例:

  1. 导入所需库:
import cv2
import os
from PIL import Image
  1. 定义一个函数来去除单张图片的背景。这里我们使用OpenCV的GrabCut算法作为例子:
def remove_background(image_path, output_path):
    img = cv2.imread(image_path, cv2.IMREAD_COLOR)

    # 创建一个与原图相同大小的掩码
    mask = np.zeros(img.shape[:2], np.uint8)

    # 定义ROI(感兴趣区域)为全图
    bgdModel = np.zeros((1, 65), np.float64)
    fgdModel = np.zeros((1, 65), np.float64)
    rect = (0, 0, img.shape[1], img.shape[0])

    # 使用GrabCut算法进行背景去除
    cv2.grabCut(img, mask, rect, bgdModel, fgdModel, 5, cv2.GC_INIT_WITH_RECT)

    # 将可能的前景区域设置为1
    mask2 = np.where((mask == 2) | (mask == 0), 0, 1).astype('uint8')

    # 应用掩码到原图上得到去除背景后的图像
    img = img * mask2[:, :, np.newaxis]

    # 保存处理后的图像
    cv2.imwrite(output_path, img)
  1. 批量处理图片:
def batch_remove_background(input_folder, output_folder):
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    for filename in os.listdir(input_folder):
        if filename.endswith(".jpg") or filename.endswith(".png"):
            input_path = os.path.join(input_folder, filename)
            output_path = os.path.join(output_folder, 'output_' + filename)

            remove_background(input_path, output_path)
            print(f"Processed {filename}")

batch_remove_background('input_images/', 'output_images/')

这段代码首先定义了一个函数remove_background,该函数接受一个图片路径和输出路径,然后使用OpenCV的GrabCut算法去除图片背景。接下来,batch_remove_background函数遍历指定输入文件夹中的所有图片,对每一张图片调用remove_background函数,并将处理后的图片保存到指定的输出文件夹。

请注意,这只是一个基本的示例,实际效果可能会根据图片的具体内容和复杂性有所不同。你可能需要根据你的具体需求调整背景去除的算法或参数。对于更复杂的背景去除任务,可以考虑使用深度学习方法如U-Net等。