确定RGB颜色的视觉亮度的公式

544

我正在寻找某种公式或算法来确定给定RGB值的颜色亮度。 我知道它不可能像将RGB值相加然后具有更高总和就更亮那么简单,但我不知道从哪里开始。

我正在寻找一种计算颜色亮度的公式或算法,其输入是RGB值。我知道只是简单地将RGB值相加并且总和越高的颜色越亮是不行的,因此我需要一个更复杂的方法。

10
感知亮度是我认为我要寻找的,谢谢。 - robmerica
我发现了一个用C#编写的代码([此处][1]),它可以很好地计算出颜色的“亮度”。在这种情况下,代码试图确定是将白色文本还是黑色文本放在该颜色上。 [1]:http://www.nbdtech.com/Blog/archive/2008/04/27/Calculating-the-Perceived-Brightness-of-a-Color.aspx - sitesbyjoe
2
有一篇很好的文章(Manipulating colors in .NET - Part 1),讨论了颜色空间及其之间的转换,包括理论和代码(C#)。要查看答案,请参阅文章中的“模型之间的转换”主题。 - underscore
看我的答案,但真正简单的是:亮度 = 0.2 * 红色值 + 0.7 * 绿色值 + 0.1 * 蓝色值 - Ronen Rabinovici
22个回答

-2

为了清晰起见,使用平方根的公式应该是

sqrt(coefficient * (colour_value^2))

而不是

sqrt((coefficient * colour_value))^2

这一点的证明在于将R=G=B三元组转换为灰度R。只有当你平方颜色值而不是颜色值乘以系数时,才会得到正确的结果。请参见Nine Shades of Greyscale


5
括号不匹配。 - log0
除非您使用的系数是正确系数的平方根。 - RufusVS

-4
请定义亮度。如果您想了解颜色接近白色的程度,可以使用欧几里得距离从(255, 255, 255)开始。

4
不可以使用sRGB值之间的欧几里得距离,因为sRGB不是一个感知均匀的笛卡尔/向量空间。如果想使用欧几里得距离作为颜色差异的度量,你至少需要转换到CIELAB,或者更好的选择是使用像CIECAM02这样的CAM。 - Myndex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接