我想一個顏色元組轉換爲一種顏色的名稱,如「黃色」或「藍色」轉換RGB顏色英文顏色的名稱,如與Python
>>> im = Image.open("test.jpg")
>>> n, color = max(im.getcolors(im.size[0]*im.size[1]))
>>> print color
(119, 172, 152)
「綠色」是否有一個簡單的方法python來做到這一點?
我想一個顏色元組轉換爲一種顏色的名稱,如「黃色」或「藍色」轉換RGB顏色英文顏色的名稱,如與Python
>>> im = Image.open("test.jpg")
>>> n, color = max(im.getcolors(im.size[0]*im.size[1]))
>>> print color
(119, 172, 152)
「綠色」是否有一個簡單的方法python來做到這一點?
它看起來像webcolors將允許你這樣做:
rgb_to_name(rgb_triplet,規格= 'CSS3')
轉換整數3元組,適合使用在RGB( )顏色三元組,如果存在任何此類名稱,則將其轉換爲其對應的標準化顏色名稱;有效值爲html4,css2,css21和css3,默認值爲css3。
例子:
>>> rgb_to_name((0, 0, 0))
'black'
是反之亦然-能夠:
>>> name_to_rgb('navy')
(0, 0, 128)
然而webcolors
如果可以」拋出一個異常找到所需顏色的匹配。我寫了一個小小的修復程序,爲請求的RGB顏色提供最接近的匹配名稱。它與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
輸出:
Actual colour name: None , closest colour name: cadetblue
有一個名爲pynche程序,它可以改變RGB用英語顏色名稱爲Python。
您可以嘗試使用方法ColorDB.nearest()
在ColorDB.py
,它可以做你想做的。
您可以找到有關此方法在這裏更多的信息:ColorDB Pynche
一個解決問題的方法包括在RGB值映射到HSL色彩空間。
一旦在HSL色彩空間中有顏色,就可以使用H(色相)組件將其映射爲顏色。請注意,顏色是一種有點主觀的概念,所以您必須定義H的哪個範圍對應給定的顏色。
對於那些誰和我一樣,希望有一個更熟悉的顏色名稱,你可以使用CSS 2.1 colour names,還webcolors
提供:
#00ffff
#000000
#0000ff
#ff00ff
#008000
#808080
#00ff00
#800000
#000080
#808000
#800080
#ff0000
#c0c0c0
#008080
#ffffff
#ffff00
#ffa500
只要使用飛梭的出色答卷,併爲獲得最接近的顏色代碼,適用於CSS 2.1:
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())]
我想我找到了你正在尋找的機器人...... http://pypi.python.org/pypi/webcolors/1.3#conversions-from-integer-rgb-triplets – mVChr 2012-03-14 00:19:32
我不知道這是否已經有解決方案,但是任何這樣的映射都必然是啓發式的,並且完全是主觀的......雖然有趣的問題! – 2012-03-14 00:21:24
你想_precise_顏色名稱或近似值?例如,「綠色」顯然是(0,255,0)'。你想要什麼顏色((0,254,0))? – katrielalex 2012-03-14 00:25:05