Як замінити фон зображення на білий за допомогою OpenCV
Як замінити фон зображення на білий за допомогою OpenCV
У цій статті ми розглянемо, як можна за допомогою Python та бібліотеки OpenCV замінити фон зображення на білий. Це може бути корисним для обробки підписів, логотипів або інших об'єктів, де потрібен чистий білий фон. Нижче наведено код, який можна використовувати для цієї задачі.
Пояснення коду
Функція replace_background_with_white
приймає зображення як вхідні дані, виконує обробку та зберігає результат з білим фоном у поточному каталозі. Вона використовує HSV-простір для точнішого виділення кольорів і маскування об'єкта. Цей підхід дозволяє залишити об'єкт видимим, а фон замінити на білий.
Код
import cv2
import numpy as np
import os
def replace_background_with_white(image, output_filename="processed_image.png"):
"""
Замінює фон зображення на білий і зберігає його в поточному каталозі.
Параметри:
image (numpy.ndarray): Вхідне зображення у форматі OpenCV.
output_filename (str): Назва файлу для збереження обробленого зображення.
Повертає:
str: Шлях до збереженого обробленого зображення.
"""
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower_white = np.array([0, 0, 200])
upper_white = np.array([180, 20, 255])
mask = cv2.inRange(hsv, lower_white, upper_white)
mask_inv = cv2.bitwise_not(mask)
result = cv2.bitwise_and(image, image, mask=mask_inv)
white_bg = np.full_like(image, 255)
final_image = np.where(result == 0, white_bg, result)
output_path = os.path.join(os.getcwd(), output_filename)
cv2.imwrite(output_path, final_image)
return output_path
input_path = "sign.jpg"
image = cv2.imread(input_path)
output_path = replace_background_with_white(image, "sign_white_bg.png")
print(f"Зображення збережено за адресою: {output_path}")
Як видно з прикладу, цей код автоматично визначає білі області на зображенні та замінює фон на білий. Ви можете використовувати цю функцію для різних типів зображень, що потребують видалення або заміни фону. Збереження відбувається в поточному каталозі, що робить процес простим і зручним для роботи.