Замена цветов всех пикселей на изображении с использованием цветовой разницы с использованием Python - PullRequest
0 голосов
/ 01 января 2019

Я пытаюсь изменить все пиксели одного изображения на определенный цвет, используя разницу цветов, чтобы сохранить разные тона и контуры.

Я уже пробовал перебирать все пиксели, вычитаяцветовой кортеж из того, на который я хочу заменить его, и заменил его, но в результате я получаю изображение серого / пепельного цвета.

Для нахождения разницы в цвете я использовал этот подход

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") 

Итак, предполагая, что это изображение назначения destination

source

И это исходное изображение, я пытаюсь получить доминирующий цвет из исходного изображения, затем использую разницу цветов от доминирующего цвета и каждого пикселяцелевое изображение, заменяя все пиксели, чтобы сделать целевое изображение таким же цветом лица, что и исходное изображение.Надеюсь, я хорошо объяснил свой вопрос.

И вот результат, который я получаю после выполнения кода wrong_image

Кроме того, если есть какой-либо способ сделать кодбеги быстрее, я был бы очень признателен.Это займет около 5 минут.

...