2015-10-19 149 views
0

我有十個顏色十六進制/ rgb值(它們是膚色) - 我希望能夠找到與特定十六進制/ rgb值最接近的匹配項。在顏色範圍內尋找最接近的顏色匹配

我會以某種方式迭代從開始顏色,直到我落在一個特定的範圍內?但是,我如何組織範圍?

我會說實話,我絕對沒有想法該怎麼做,甚至什麼搜索,所以任何幫助,或正確的方向點頭將不勝感激。

乾杯

+1

的http://計算器。 com/questions/14482226 /如何獲取顏色中間兩色 –

+0

這是用於計算其他兩種顏色的平均顏色。這對我有什麼幫助? – ojsglobal

回答

0

首先,它不一定是一個編程的問題,但...

歐氏距離是一個很好的方法。舉個例子:

使用常規html顏色名稱,BlueViolet(#8A2BE2)和GoldenRod(#DAA520),它更接近LightSeaGreen(#20B2AA)?拆分3個十六進制值的三維矢量這樣:

BV = 138,43,226 
GR = 218,165,32 
LSG = 32,178,170 

使用公式:

d(p,q) = sqrt((px - qx)^2 + (py - qy)^2 + (pz - qz)^2) 

d(BV,LSG) = sqrt((138-32)^2 + (43-178)^2 + (226-170)^2) 
d(BV,LSG) = sqrt(11236 + 18225 + 3136) 
d(BV,LSG) = sqrt(32597) 
d(BV,LSG) = 180.546 

d(GR,LSG) = sqrt((218-32)^2 + (165-178)^2 + (32-170)^2) 
d(GR,LSG) = sqrt(34596 + 169 + 19044) 
d(GR,LSG) = sqrt(53809) 
d(GR,LSG) = 231.967 

因此,大家可以看到d(BV,LSG)d(GR,LSG)小,所以藍紫接近海藻綠比黃花是。

1

我可以爲您提供使用2種顏色之間的歐氏距離。如果你有任何2種顏色,例如#89a839和#ad9009,你可以將它轉換成3維矢量,你會得到這2個矢量(ad,90,09)和(89,a8,39); 然後將數字轉換爲十進制範圍。並且算了算beetween這兩點

d = sqrt((x1-x2)^2,(y1-y2)^2,(z1-z2)^2,) 

歐氏距離就指望這個距離beetween你的顏色和你有所有顏色,並找到最小值,那麼你的顏色會最接近特定的顏色。

如果您有任何編碼問題,請隨時詢問。

1

儘管RGB上的歐幾里得距離可能有所幫助,但使用適當的顏色模型會更好。我會建議LCH或至少HSL。然後爲每個頻道分配權重。例如,對於人眼而言,亮度是以對數尺度感知的。調整其效果可能會提供更好的匹配。所以,下面永遠不會發生:

#400(非常暗紅色)匹配#222(幾乎是黑灰色,距離12) 代替#800(暗紅色,距離16)