Я пытаюсь изменить все пиксели одного изображения на определенный цвет, используя разницу цветов, чтобы сохранить разные тона и контуры.
Я уже пробовал перебирать все пиксели, вычитаяцветовой кортеж из того, на который я хочу заменить его, и заменил его, но в результате я получаю изображение серого / пепельного цвета.
Для нахождения разницы в цвете я использовал этот подход
from colormath.color_objects import sRGBColor, LabColor
from colormath.color_conversions import convert_color
from colormath.color_diff import delta_e_cie2000
from trying_out_colors import get_main_color
def find_color_difference_with_tuple(tuple_1, tuple_2):
a, b, c = tuple_1
d, e, f = tuple_2
rgb_1 = sRGBColor(a, b, c)
lab_1 = convert_color(rgb_1, LabColor)
rgb_2 = sRGBColor(d, e, f)
lab_2 = convert_color(rgb_2, LabColor)
difference = delta_e_cie2000(lab_1, lab_2)
return difference
Затем для замены цветов я использовал этот подход
import numpy
from PIL import Image
from trying_out_colors import get_main_color
from color_difference import find_color_difference_with_tuple
source_image = "source.png"
destination_image = "destination.png"
# get_main_color function finds the dominant color of an image
value = get_main_color(source_image)
destination = Image.open(destination_image)
new = Image.new("RGB", destination.size, 0xffffff)
width, height = destination.size
for x in range(width):
for y in range(height):
destiny = destination.getpixel((x, y))
color_diff = find_color_difference_with_tuple(value, destiny)
total_diff = tuple(numpy.subtract(value, color_diff))
total_diff = tuple([int(x) for x in total_diff])
new.putpixel((x, y), total_diff)
new.save("new_image.png")
Итак, предполагая, что это изображение назначения
![source](https://i.stack.imgur.com/vJdLa.png)
И это исходное изображение, я пытаюсь получить доминирующий цвет из исходного изображения, затем использую разницу цветов от доминирующего цвета и каждого пикселяцелевое изображение, заменяя все пиксели, чтобы сделать целевое изображение таким же цветом лица, что и исходное изображение.Надеюсь, я хорошо объяснил свой вопрос.
И вот результат, который я получаю после выполнения кода ![wrong_image](https://i.stack.imgur.com/Y8pry.png)
Кроме того, если есть какой-либо способ сделать кодбеги быстрее, я был бы очень признателен.Это займет около 5 минут.