Удалить фон с фото на Python

Удаление фона с фотографий — важная задача в обработке изображений, которая находит применение в различных областях, таких как электронная коммерция, дизайн и создание контента. В этой статье мы рассмотрим, как удалить фон с фото, используя Python и библиотеку rembg.

Установка необходимых библиотек

Прежде чем приступить к написанию кода, необходимо установить несколько библиотек. Мы будем использовать rembg, Pillow и numpy.
pip install rembg Pillow numpy

Основной код

Теперь мы можем написать скрипт для удаления фона с изображения. Для этого создадим файл remove_bg.py и добавим в него следующий код:
from PIL import Image
import numpy as np
import os

def remove_bg(image_path, threshold=240):
    image = Image.open(image_path).convert("RGBA")
    data = np.array(image)
    
    # Создание маски на основе порогового значения
    mask = (data[:, :, :3].sum(axis=2) > threshold * 3)
    
    # Установка альфа-канала
    data[mask, 3] = 0

    # Создание и сохранение результата
    result_image = Image.fromarray(data, mode="RGBA")
    filename, file_extension = os.path.splitext(image_path)
    result_image.save(filename + '.png')

# Пример использования функции
remove_bg('image.jpg', 235)
Этот скрипт выполняет следующие шаги:
  1. Открывает исходное изображение.
  2. Преобразует изображение в массив numpy.
  3. Использует функцию remove из библиотеки rembg для удаления фона.
  4. Преобразует результат обратно в изображение.
  5. Сохраняет изображение с удаленным фоном.

Пример использования

Предположим, у нас есть изображение input.jpg, и мы хотим сохранить результат в output.png. Для этого достаточно запустить наш скрипт:
py remove_bg.py
После выполнения скрипта в текущей директории появится файл output.png с удаленным фоном.

Вариант 2

import cv2, os
from PIL import Image

# pip install opencv-python pillow

image_file = 'signature.jpg'
image = cv2.imread(image_file) # Загружаем изображение
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # Преобразуем изображение в оттенки серого
_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) # Применяем бинаризацию с адаптивным порогом
mask = binary.copy() # Создаем маску для прозрачного фона

# Преобразуем изображение и маску в формат PIL
image_pil = Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
mask_pil = Image.fromarray(mask)

image_pil.putalpha(mask_pil) # Создаем альфа-канал на основе маски
filename, file_extension = os.path.splitext(image_file)
image_pil.save(filename + '.png') # Сохраняем результат

Заключение

Удаление фона с фотографий на Python — это простая задача, если использовать подходящие инструменты. Библиотека rembg значительно упрощает этот процесс, предоставляя мощные алгоритмы для обработки изображений. Надеюсь, эта статья поможет вам в реализации подобных задач в ваших проектах.
Поделится:
*текст* - жирный, ~текст~ - курсивный, -текст- - зачеркнутый, _текст_ - подчеркнутый
IP-адрес: 35.170.81.33
Часовой пояс: Asia/Almaty
Подробнее

Сервисы

Страницы

Информация