Вы можете рассчитать расстояния, передавая массивы.
Если ваше изображение имеет форму (x, y, 3), а ваша палитра имеет форму (n, 3), то вы можете рассчитать расстояние между каждымпиксель и каждый цвет в виде массива с формой (x, y, n):
# distance[x,y,n] is the distance from pixel (x,y) to
# color n
distance = np.linalg.norm(
img[:,:,None] - colors[None,None,:], axis=3)
Индекс :
означает «всю ось», а индекс None
означает «передать значение вдоль этогоaxis ".
Затем вы можете выбрать ближайший индекс цвета:
# pal_img[x,y] is the index of the color closest to
# pixel (x,y)
pal_img = np.argmin(distance, axis=2)
Наконец, вы можете преобразовать обратно в RGB:
# rgb_img[x,y] is the RGB color closest to pixel (x,y)
rgb_img = colors[pal_img]
Это показывает, как выне нужны специальные функции в NumPy.К сожалению, это может быть немного трудно понять.