Как удалить цвета из изображения с помощью скрипта Python
Случай довольно распространенный: вы использовали один из многих доступных инструментов для удаления фона с фотографии, но полученный результат оказался несовершенным. К сожалению, вокруг областей, которые сложнее очертить, фон все еще виден, и его присутствие остается очевидным. Есть способ устранить цвета автоматически из изображения, фокусируясь только на тех, которые по тону близки к цвету, указанному во входных данных?
Учитывая, что достичь цели можно с помощью таких приложений, как Photoshop, GIMP, LunaPic и Photopea, могли ли вы когда-нибудь подумать, что сможете удалить нежелательные цвета из фотографии с помощью простого скрипта Python?
Питон Его можно установить на любую платформу, не обязательно на системы Linux. Пользователи Windows, например, могут установить его с помощью официального пакета или, что еще лучше, с помощью ВСЛ (Подсистема Windows для Linux) или возможность запуска Linux в окне, не отказываясь от платформы Microsoft.
Удаление цветов из изображения с помощью простого скрипта Python
Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)
Предполагается, что у вас уже установлен Python и вы можете вызвать менеджер пакетов. пипвам необходимо добавить две важные библиотеки:
pip установить numpy
pip установить opencv-python
Библиотека NumPy используется для обработки массивов и числовых операций, в то время как OpenCV обогащает Python широким спектром инструментов обработки изображений.
Код Python, который мы представляем ниже, использует библиотеку OpenCV для манипулировать изображениями и цвета. Основная цель – выявить и удалить все вариации цвета указан на фото. «Целевой» цвет определяется путем предоставления соответствующего цвета в качестве входных данных. код HTML (HTML-шестнадцатеричный). Это выражение автоматически преобразуется в другое цветовое пространство для использования в последующей обработке.
Чтобы использовать наш код Python, просто скопируйте его в буфер обмена, затем введите nano Remove-colors.py, а затем щелкните правой кнопкой мыши, чтобы вставить его в текстовый редактор.
import cv2 import numpy as np # Укажите цвет с его HTML-кодом # и изображение для обработки: color_hex = '#068AB1' image = cv2.imread('testimage.png', cv2.IMREAD_UNCHANGED) # Преобразование шестнадцатеричного HTML в RGB значения (шестнадцатеричное в десятичное) r = int(color_hex(1:3), 16) g = int(color_hex(3:5), 16) b = int(color_hex(5:7), 16) # Преобразует RGB в BGR (поскольку OpenCV использует BGR) color_bgr = np.uint8((((b, g, r)))) # Преобразует указанный цвет в цветовое пространство HSV color_hsv = cv2.cvtColor(color_bgr, cv2.COLOR_BGR2HSV) hue = color_hsv (0)(0)(0) # Извлечь оттенок (Hue) # Проверить, есть ли у изображения альфа-канал (прозрачность) if image.shape(2) == 4: # Если у него есть альфа-канал, отделить его b , g, r, a = cv2.split(image) img_bgr = cv2.merge((b, g, r)) # Объединить только каналы BGR else: img_bgr = image # Преобразовать изображение в цветовое пространство HSV hsv = cv2.cvtColor( img_bgr, cv2.COLOR_BGR2HSV) # Определить широкий цветовой диапазон для указанного цвета low_bound = np.array((hue – 10, 50, 50)) Upper_bound = np.array((hue + 10, 255, 255)) # Создать маска для захвата всех цветовых вариаций Mask = cv2.inRange(hsv, Lower_bound, Upper_bound) # Удалить все цветовые вариации из изображения result = cv2.bitwise_and(img_bgr, img_bgr, Mask=~mask ) # Если исходное изображение имело альфа канал, добавьте альфа-канал к результату, если image.shape(2) == 4: result = cv2.merge((result, a)) # Сохраняем результат в формате PNG cv2.imwrite('testimage-MOD.png' , результат)
Как работает скрипт и какие изменения внести
Чтобы использовать скрипт, просто укажите имя обрабатываемого изображения вместо testimage.png (сохраненного в том же каталоге, где находится код Python). Обработанное изображение сохраняется в виде файла testimage-MOD.png: измените имя файла по своему усмотрению.
Однако вместо #068AB1 необходимо указать HTML-код цвета, который нужно удалить. Этот цвет автоматически преобразуется в ваш RGB-компоненты (красный, зеленый, синий). Эти значения затем переставляются в формате БГРиспользуемый OpenCV.
Скрипт преобразует цвет BGR в Цветовое пространство HSV (Оттенок, Насыщенность, Значение), затем извлекаем компонент оттенка (оттенок). Флаг cv2.IMREAD_UNCHANGED гарантирует, что если изображение содержит альфа-канал (прозрачность), что характерно для файлов PNG, оно сохраняется.
Изображение BGR преобразуется в цветовое пространство HSV, чтобы сравнить цвета в зависимости от их тона. Путем последующего определения цветового диапазона сценарий определяет диапазон Из оттенок чтобы уловить все вариации, присутствующие на изображении.
маска (маска) специально созданный, выделяет все области изображения, попадающие в указанный цветовой диапазон. Указанные цвета затем удаляются из изображения. инвертирование маску (~mask) и применение ее к изображению BGR. Если исходное изображение имело альфа-канал, он добавляется обратно к окончательному результату.
Как начать редактирование изображений
После внесения соответствующих изменений (имена файлов и HTML-код цвета, который нужно удалить) вы можете нажать CTRL+O, чтобы сохранить скрипт Python в редакторе nano, а затем CTRL+X, чтобы выйти.
На данный момент все готово для проведения теста: вот и все. скопировать изображение в папке сценария remove-colors.py, затем вызовите следующую команду:
python3 rimuovi-colori.py
После завершения обработки полученное изображение будет найдено в том же каталоге. Если вы используете WSL в Windows, вы можете нажать Windows+R, ввести \\WSL$, выбрать установленный дистрибутив Linux, затем свою домашнюю папку, а затем свое имя пользователя.
Как вы можете видеть на изображении в качестве примера, отличное веб-приложение для удаления фона оставило часть фон синий изначально присутствует(исходное изображение на Unsplash) в волосах модели. Указав HTML-код #068AB1 (голубой) в качестве входных данных и запустив сценарий Python, полученное изображение показано справа. Лучше, да?
При желании вы можете улучшить сценарий, заставив его обрабатывать имя обрабатываемого изображения, имя выходного изображения и HTML-код в качестве аргументов, передаваемых из командной строки.
Вступительное изображение предоставлено: iStock.com – Городенкофф
Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)