Отображение цвета изображения на конкретное пользовательское цветовое пространство - PullRequest
0 голосов
/ 28 октября 2019

Я хотел бы отобразить цвета изображения на отдельную предопределенную цветовую карту:

rbg_tuples_255_selected = [(204, 51, 51), (204, 114, 51), (145, 204, 51), (51, 204, 82), (51, 51, 204)]

Задача состоит в том, чтобы сопоставить каждый код rbg изображения с ближайшим (евклидовым расстоянием) цветом в rbg_tuples_255_selected .

Моя текущая идея очень интенсивна:

def map_rbg(rgb_value: list, normed: bool = True):
    min_dist_index = np.argmin([distance.euclidean(i_rbg, rgb_value) for i_rbg in RGB_tuples_selected])
    rbg_new = rbg_tuples_255_selected [min_dist_index]

    return rbg_new

И применяя ее

from PIL import Image

# Load and prepare image array
im = Image.open("image.jpg")
pixels = np.array(im)
s = pixels.shape
p = pixels.reshape((s[0]*s[1], s[2]))

# Map to discrete color space
RGB_tuples_converted = np.array(list(map(lambda x: tuple(map_rgb(x)), p)))

# Generate Image 
img = Image.fromarray(np.uint8(pixels_final.reshape(s)))
...