我有十个颜色十六进制/ rgb值(它们是肤色) - 我希望能够找到与特定十六进制/ rgb值最接近的匹配项。在颜色范围内寻找最接近的颜色匹配
我会以某种方式迭代从开始颜色,直到我落在一个特定的范围内?但是,我如何组织范围?
我会说实话,我绝对没有想法该怎么做,甚至什么搜索,所以任何帮助,或正确的方向点头将不胜感激。
干杯
我有十个颜色十六进制/ rgb值(它们是肤色) - 我希望能够找到与特定十六进制/ rgb值最接近的匹配项。在颜色范围内寻找最接近的颜色匹配
我会以某种方式迭代从开始颜色,直到我落在一个特定的范围内?但是,我如何组织范围?
我会说实话,我绝对没有想法该怎么做,甚至什么搜索,所以任何帮助,或正确的方向点头将不胜感激。
干杯
首先,它不一定是一个编程的问题,但...
欧氏距离是一个很好的方法。举个例子:
使用常规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)
小,所以蓝紫接近海藻绿比黄花是。
我可以为您提供使用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你的颜色和你有所有颜色,并找到最小值,那么你的颜色会最接近特定的颜色。
如果您有任何编码问题,请随时询问。
尽管RGB上的欧几里得距离可能有所帮助,但使用适当的颜色模型会更好。我会建议LCH或至少HSL。然后为每个频道分配权重。例如,对于人眼而言,亮度是以对数尺度感知的。调整其效果可能会提供更好的匹配。所以,下面永远不会发生:
#400(非常暗红色)匹配#222(几乎是黑灰色,距离12) 代替#800(暗红色,距离16)
的http://计算器。 com/questions/14482226 /如何获取颜色中间两色 –
这是用于计算其他两种颜色的平均颜色。这对我有什么帮助? – ojsglobal