我正在寻找某种公式或算法来确定给定RGB值的颜色的亮度。我知道这不像把RGB值加在一起那么简单,更高的总和更亮,但我有点不知所措,不知道从哪里开始。
当前回答
方法可以根据您的需要而有所不同。以下是计算亮度的3种方法:
亮度(某些颜色空间的标准):(0.2126*R + 0.7152*G + 0.0722*B)光源 亮度(感知选项1):(0.299*R + 0.587*G + 0.114*B)光源 亮度(感知选项2,计算较慢):根号(0.241*R^2 + 0.691*G^2 + 0.068*B^2)→根号(0.299*R^2 + 0.587*G^2 + 0.114*B^2)(感谢@MatthewHerbst)来源
[编辑:添加了使用命名css颜色的例子,按每种方法排序。]
其他回答
基于所有这些答案,我的简单结论是,对于大多数实际用例,您只需要:
brightness = 0.2*r + 0.7*g + 0.1*b
当r,g,b值在0到255之间时,亮度范围也在0(=黑)到255(=白)之间。
可以对它进行微调,但通常没有必要。
亮度值= 0.3 R + 0.59 G + 0.11 B
http://www.scantips.com/lumin.html
如果你想知道颜色有多接近白色你可以用欧几里得距离(255,255,255)
我认为RGB颜色空间相对于L2欧几里得距离在感知上是不均匀的。 统一空间包括CIE LAB和LUV。
请定义亮度。如果你想知道颜色有多接近白色你可以用欧几里得距离(255,255,255)
有趣的是,RGB=>HSV的公式只是使用v=MAX3(r,g,b)。换句话说,你可以用(r,g,b)的最大值作为HSV中的V。
我查了一下,在Hearn & Baker的575页,这也是他们计算“价值”的方法。
为了清晰起见,使用平方根的公式必须是
√(系数* (colour_value^2))
not
√(系数*颜色值)^2
证明这一点的证据在于将R=G=B三位一体转换为灰度R。只有当你将颜色值平方,而不是颜色值乘以系数时,这才成立。参见灰色的九种色调