Utilizzando l'immagine di prova, il colore più comune ha un valore RGB di (1, 1, 1). Questo è molto nero, ma non esattamente nero. La mia risposta utilizza lo PIL library, webcolors e un generoso aiuto del codice dalla risposta this.
from PIL import Image
import webcolors
def closest_color(requested_color):
min_colors = {}
for key, name in webcolors.css3_hex_to_names.items():
r_c, g_c, b_c = webcolors.hex_to_rgb(key)
rd = (r_c - requested_color[0]) ** 2
gd = (g_c - requested_color[1]) ** 2
bd = (b_c - requested_color[2]) ** 2
min_colors[(rd + gd + bd)] = name
return min_colors[min(min_colors.keys())]
def get_color_name(requested_color):
try:
closest_name = actual_name = webcolors.rgb_to_name(requested_color)
except ValueError:
closest_name = closest_color(requested_color)
actual_name = None
return actual_name, closest_name
if __name__ == '__main__':
lt = Image.open('test.gif').convert('RGB').getcolors()
lt.sort(key=lambda tup:tup[0], reverse=True)
actual_name, closest_name = get_color_name(lt[0][4])
print lt[0], actual_name, closest_name
uscita:
(531162, (1, 1, 1)) None black
In questo caso, si sarebbe interessato nella variabile closest_name
. Il primo (lt[0]
) mostra il valore RGB più comune. Questo non ha un nome di colore web definito, da cui il None
per actual_name
Spiegazione:
Questo sta aprendo il file che ci hai fornito, convertendolo in RGB e quindi eseguire il metodo di PIL getcolors
su l'immagine. Il risultato è una lista di tuple nel formato (count, RGB_color_value). Quindi ho ordinato l'elenco (in ordine inverso). Utilizzando le funzioni dell'altro answer, passo il valore di colore RGB più comune (ora la prima tupla nell'elenco e l'RBG è il secondo elemento della tupla).
'load' l'immagine, iterare i pixel, e incrementare un contatore ogni volta che si trova un (0,0,0) di colore. – Kevin
Sembra che il nero è (1 1, 1) per cui si potrebbe desiderare di controllare solo se il valore del pixel è inferiore a 10 o qualcosa del genere. – Matthew
Si dovrebbe usare PIL (Python Imaging Library). Ecco come usarlo:. Http://stackoverflow.com/a/11064935/1612701 –