Konwertuj kolor RGB na angielską nazwę koloru, np.
Chcę przekonwertować krotkę koloru na nazwę koloru, taką jak "żółty" lub "niebieski"
>>> im = Image.open("test.jpg")
>>> n, color = max(im.getcolors(im.size[0]*im.size[1]))
>>> print color
(119, 172, 152)
Czy jest na to prosty sposób w Pythonie?
5 answers
Wygląda na to, że webcolors pozwoli Ci to zrobić:
Rgb_to_name (rgb_triplet, spec='css3')
Konwertuje trzy krotki liczb całkowitych, odpowiednie do użycia w trójkącie kolorów RGB (), na odpowiadającą im znormalizowaną nazwę koloru, jeśli taka nazwa istnieje; poprawnymi wartościami są html4, css2, css21 i css3, a domyślną wartością jest css3.
Przykład:
>>> rgb_to_name((0, 0, 0))
'black'
Jest odwrotnie-zdolny:
>>> name_to_rgb('navy')
(0, 0, 128)
Aby znaleźć najbliższą nazwę koloru:
Jednakże webcolors
wyświetla wyjątek, jeśli nie może znaleźć dopasowania dla żądanego koloru. Napisałem małą poprawkę, która dostarcza najbliższą pasującą nazwę dla żądanego koloru RGB. Odpowiada odległości euklidesowej w przestrzeni RGB.
import webcolors
def closest_colour(requested_colour):
min_colours = {}
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_colour[0]) ** 2
gd = (g_c - requested_colour[1]) ** 2
bd = (b_c - requested_colour[2]) ** 2
min_colours[(rd + gd + bd)] = name
return min_colours[min(min_colours.keys())]
def get_colour_name(requested_colour):
try:
closest_name = actual_name = webcolors.rgb_to_name(requested_colour)
except ValueError:
closest_name = closest_colour(requested_colour)
actual_name = None
return actual_name, closest_name
requested_colour = (119, 172, 152)
actual_name, closest_name = get_colour_name(requested_colour)
print "Actual colour name:", actual_name, ", closest colour name:", closest_name
Wyjście:
Actual colour name: None , closest colour name: cadetblue
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-14 10:13:11
Istnieje program o nazwie pynche, który może zmienić nazwę RGB na nazwę koloru w języku angielskim dla Pythona.
Możesz spróbować użyć metody ColorDB.nearest()
W ColorDB.py
, która może zrobić to, co chcesz.
Więcej informacji na temat tej metody znajdziesz tutaj: ColorDB Pynche
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-14 00:26:02
Dla tych, którzy, podobnie jak ja, chcą bardziej znanej nazwy kolorów, możesz użyć CSS 2.1 nazw kolorów , również dostarczonych przez webcolors
:
- aqua:
#00ffff
- czarny:
#000000
- Niebieski:
#0000ff
- Fuksja:
#ff00ff
- zielony:
#008000
- szary:
#808080
- lime:
#00ff00
- bordowy:
#800000
- navy:
#000080
- olive:
#808000
- fioletowy:
#800080
- czerwony:
#ff0000
- srebro:
#c0c0c0
- teal:
#008080
- Biały:
#ffffff
- żółty:
#ffff00
- pomarańczowy:
#ffa500
def get_colour_name(rgb_triplet):
min_colours = {}
for key, name in webcolors.css21_hex_to_names.items():
r_c, g_c, b_c = webcolors.hex_to_rgb(key)
rd = (r_c - rgb_triplet[0]) ** 2
gd = (g_c - rgb_triplet[1]) ** 2
bd = (b_c - rgb_triplet[2]) ** 2
min_colours[(rd + gd + bd)] = name
return min_colours[min(min_colours.keys())]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-31 22:49:05
Rozwiązanie problemu polega na mapowaniu wartości RGB do przestrzeni kolorów HSL.
Gdy masz kolor w przestrzeni kolorów HSL, możesz użyć komponentu H (hue)do odwzorowania koloru. Zauważ, że kolor jest nieco subiektywnym pojęciem, więc będziesz musiał określić, które zakresy H odpowiadają danemu kolorowi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-14 00:37:58
Najlepsze rozwiązanie, jakie znalazłem, aby rozwiązać ten problem, to to Dostarczone przez tux21b w tym poście:
Znajdź nazwę koloru z szesnastkowego kodu koloru
Z poprawką, którą zrobiłem (aby uniknąć podziału przez błąd zerowy).
Jest to (z mojego zrozumienia) obliczenia przybliżenia, które nie wymaga ładowania dużego zestawu tabeli danych, aby uzyskać zbliżającą się wartość, a które pozwalają ustawić własny zestaw potrzebnych kolorów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-30 13:43:43