2015-10-19 144 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)