【发布时间】:2011-01-06 12:46:44
【问题描述】:
RGB 中冷色和暖色 (http://www.diy-bathroom-remodel.com/images/color_wheel.gif) 的范围是多少?
【问题讨论】:
-
在 RGB 中,冷色的蓝色多于红色。在 HSL 中,冷色介于 91 和 269 的色调度范围之间(注意:90 和 270 既不冷也不暖)。
RGB 中冷色和暖色 (http://www.diy-bathroom-remodel.com/images/color_wheel.gif) 的范围是多少?
【问题讨论】:
将您链接到的图像作为“暖”和“冷”的参考,我们得到以下信息。
R 越多,颜色越暖,B 越多,颜色越冷。 G 带您穿过绿松石色、绿色和黄色,每一种都越来越暖。当 G 为零时,当 R 和 B 改变时,你在圆的左下角对角线移动。当 G 接近 255 时,当 R 和 B 发生变化时,您会越过右上角的对角线。
但是,相邻的暖色和冷色中的绿色含量不同。对角线正下方的红色比其正上方的红色绿色少。对角线正下方的蓝色比其正上方的蓝色绿色少。这个色轮看起来并不能很好地代表 RGB 空间,尤其是在光谱的蓝色端。
最终,您对冷暖的感知取决于您的显示器设置和光照条件。很多也是你的感知和认知——你认为是温暖的还是寒冷的。在图像中,颜色对比会影响您的判断。与明显冷色相邻的“中间”颜色看起来很暖,但如果相同颜色靠近明显暖色,则看起来很冷。看看这个色轮:
这里显示了每种 24 位颜色(R、G 和 B 各 8 位),并显示了顶部、右侧、底部和左侧颜色的 RGB 值。在我看来,“冷”的颜色比“暖”的颜色要多。希望这可以帮助您确定您认为冷色和暖色的 RGB 值。
奖励:在上图中,您还可以看到以色相、饱和度和值 (HSV) 颜色模型表示的颜色。色调基本上对颜色进行编码。饱和度编码颜色的“饱满”程度——饱和度越低,颜色就越“暗淡”,即。白色的。值编码它的暗度——值越少越黑,也使饱和度的白色更灰。色调从 0 到 360,对应于圆的角度,0 表示完全红色,90 表示一种霓虹绿,180 表示亮蓝色,270 表示蓝紫色,360 又回到红色。 S 和 V 从 0 到 100 会影响确切的阴影 - 这些示例是 S=V=100。
在我看来,0-80 和 330-360 范围内的 H 值是温暖的,而 H>80 和 H
您可能想在您最喜欢的绘画程序中打开颜色选择器。它们通常可以并排显示 HSV 和 RGB,并让您使用色轮并查看对 HSV 和 RGB 数字的影响。如果你还没有,我建议GIMP。它有我用来获取这个答案的数字的色轮。
奖励 2: 以上所有假设都是对什么是温暖的,什么是凉爽的主观评估。我认为对色温进行客观测量的唯一方法是测量它并在温标上表达它。开尔文似乎经常被使用。该措施不仅考虑了颜色的阴影,还考虑了它的亮度(或它发出的光量)。如果您有一台现代显示器,它可能有一个温度设置和一些开尔文值可供选择。只要您知道白色的温度(白平衡),就可以计算显示器上每种 RGB 颜色的温度。但是,这个计算非常复杂,我不知道该怎么做。您可能会发现 Bruce Lindbloom 是获取更多信息的好来源,或者任何有关色彩科学的书籍。但我想这超出了你对你的问题的讨价还价...... ;-)
【讨论】:
我觉得像
if (B>R) {
color=cool
} else {
color=warm
}
是一个很好的近似值。您可以使用以下方法在色轮上查看: http://www.colorzilla.com/firefox/
【讨论】:
warm...但是因为颜色有相等的红色和蓝色...输出应该是undefined...它既不暖也不冷。
if (B!=R && B>R) :-)
已经回答但需要补充:
如果您对物理温度和颜色相关性感兴趣,那么这就是您要寻找的比例:
它是从给定温度的黑体发出的光的颜色。在天文学中,这用于恒星颜色分类(如BV color index)。
它也可以用于间接温度测量。
【讨论】:
我发现这些参数令人满意
对于暖色:
对于冷色:
请注意,高绿色会使颜色更冷(在我看来,但这值得商榷^^),这就是为什么它仅限于暖色但不适用于冷色。
【讨论】:
暖色有更多的红色, 冷色有更多的蓝色。
在 RGB 中:
red = 0
blue = 0
if (red > blue) {
isWarmColor = true
isCoolColor = false
}
else if (red < blue) {
isWarmColor = false
isCoolColor = true
}
else {
isWarmColor = false
isCoolColor = false
}
在 HSL 中:
hueAngle = 0
if (hueAngle < 0 || hueAngle > 360 || hueAngle == 90 || hueAngle == 270) {
isWarmColor = false
isCoolColor = false
}
else if (hueAngle > 90 && hueAngle < 270) {
isWarmColor = false
isCoolColor = true
}
else if (hueAngle < 90 && hueAngle > 270) {
isWarmColor = true
isCoolColor = false
}
【讨论】:
简单准确:
def is_hot(a):
return (a[..., 'RED'] > 128)
其中 'RED' 代表数组 a 中红色通道的索引。
这很有效 - 您可以通过以下方式亲自查看:(a) 查看 Fabian Fagerholm 的第二个轮子和/或 (b) 转到以下链接,然后将杆向上和向下移动到两个温暖的末端。
【讨论】: