Python Pil-encontrar a cor mais próxima (cores de arredondamento)

Há um jogo chamado Roblox, no qual o jogador faz o jogo, geralmente de tijolos lego.

No Roblox, para as cores dos tijolos, você pode usar valores RGB típicos, mas isso exigiria um elemento adicional que não é muito eficiente quando se trata de tamanho de arquivo. Em vez de usar valores RGB, BrickColor é muito mais econômico em tamanho de arquivo. Ele usa um inteiro para ser interpretado como uma determinada cor. Eis o que quero dizer: Color Codes

Aqui está um trecho de o meu código:

import Image
f = raw_input('Image:\n')
im = Image.open(f)
rgb_im = im.convert('RGB')
r, g, b = rgb_im.getpixel((x, y))

no meu programa, preciso de encontrar o código de cores mais próximo de um valor RGB.

como é que isto pode ser conseguido?

Author: GShocked, 2015-12-19

1 answers

Crie uma lista de cores na sua mesa (eu chamo-lhe cores). Ordena a lista à distância do ponto r, g, b que estás a questionar. O primeiro elemento da lista é a cor mais próxima

def distance(c1, c2):
    (r1,g1,b1) = c1
    (r2,g2,b2) = c2
    return math.sqrt((r1 - r2)**2 + (g1 - g2) ** 2 + (b1 - b2) **2)

colors = list(rgb_code_dictionary.keys())
closest_colors = sorted(colors, key=lambda color: distance(color, point))
closest_color = closest_colors[0]
code = rgb_code_dictionary[closest_color]
 5
Author: mattsap, 2015-12-19 16:36:20