Я хотел бы отобразить цвета изображения на отдельную предопределенную цветовую карту:
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)))