给定一个RGB值,在数据库中找到最接近的匹配的最佳方法是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (215)

我有一个RGB值,如果数据库中的颜色表中不存在RGB值,我需要找到最接近的颜色。我正在考虑比较所有的值并找出差异(红色、绿色和蓝色),然后取平均值。最低的平均偏差应该是最接近的颜色。在我看来,应该有一个更好的方法。有什么想法吗?

提问于
用户回答回答于

将颜色作为三维空间中的向量,然后使用3D Pythagoras可以轻松地计算差值:

d = sqrt((r2-r1)^2 + (g2-g1)^2 + (b2-b1)^2)

然而你可能想调整颜色,以避免它们具有同样的重要性。

例如,使用一种典型的加权方法:

d = sqrt(((r2-r1)*0.3)^2 + ((g2-g1)*0.59)^2 + ((b2-b1)*0.11)^2)

由于眼睛对绿色最敏感,对蓝色最不敏感,因此,只有在蓝色组件中不同的两种颜色必须有更大的数值差异才能被认为“更不同”,而不是绿色组件中相同的数值差异。

还有各种优化计算的方法。例如,因为你对实际的d值,可以不使用平方根:

d =   ((r2-r1)*0.30)^2
    + ((g2-g1)*0.59)^2
    + ((b2-b1)*0.11)^2
用户回答回答于

以下内容与你所描述的完全相同:

select (abs(my_R - t.r) + abs(my_G - t.g) + abs(my_B - t.b)) / 3 as difference, t.*
from RGBtable t
order by difference desc;

扫码关注云+社区

领取腾讯云代金券