【问题标题】:RGB range for cold and warm colors?冷暖色的RGB范围?
【发布时间】:2011-01-06 12:46:44
【问题描述】:

RGB 中冷色和暖色 (http://www.diy-bathroom-remodel.com/images/color_wheel.gif) 的范围是多少?

【问题讨论】:

  • 在 RGB 中,冷色的蓝色多于红色。在 HSL 中,冷色介于 91 和 269 的色调度范围之间(注意:90 和 270 既不冷也不暖)。

标签: colors rgb


【解决方案1】:

将您链接到的图像作为“暖”和“冷”的参考,我们得到以下信息。

  • 最热的颜色是全红色(R=255,G=0,B=0)。
  • 最冷的颜色是完全蓝色(R=0、G=0、B=255)。

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 是获取更多信息的好来源,或者任何有关色彩科学的书籍。但我想这超出了你对你的问题的讨价还价...... ;-)

【讨论】:

  • 我只想说:转换为 HSV/HSL,然后简单地根据 H 确定温暖度。无需考虑如何处理绿色 :-)
  • @user562374:我完全同意并将其发布为答案(附有示例转换代码),但该问题明确要求解决 RGB 颜色空间。
  • @user562374, @Cody Gray:是的,HSV 有这样的一些好处,但问题需要 RGB 解决方案。感谢您的 cmets - 我受到启发,用一些 HSV 奖励的东西来更新答案。
【解决方案2】:

我觉得像

if (B>R) { 
    color=cool
} else { 
    color=warm
}

是一个很好的近似值。您可以使用以下方法在色轮上查看: http://www.colorzilla.com/firefox/

【讨论】:

  • 也许是一个很好的近似值,但如果你想以任何精度确定它,你需要在某处考虑绿色值......例如,(50, 200, 0) 产生一个漂亮的中绿色,可能被认为是“酷”的颜色。
  • 我对忽略绿色并不完全满意,但在我看来,诸如“暖”和“冷”之类的分类非常主观,以至于“准确地确定”可能会过度设计位...我想这取决于要求。
  • 你对主观性是完全正确的。文化通过语言决定了人们所认知的不同颜色和相同颜色的变体。例如,某些语言对绿色和蓝色使用相同的词,甚至对蓝色和黑色使用相同的词(例如en.wikipedia.org/wiki/…)。但人们是否真正看到不同或相同的颜色是另一回事(例如en.wikipedia.org/wiki/…)。
  • 暖色有更多的红色,冷色有更多的蓝色。如果红色=100 和蓝色=100……怎么办?你的代码说颜色是warm...但是因为颜色有相等的红色和蓝色...输出应该是undefined...它既不暖也不冷。
  • 很公平,我想 if 应该更像 if (B!=R && B>R) :-)
【解决方案3】:

已经回答但需要补充:

如果您对物理温度和颜色相关性感兴趣,那么这就是您要寻找的比例:

它是从给定温度的黑体发出的光的颜色。在天文学中,这用于恒星颜色分类(如BV color index)。

它也可以用于间接温度测量。

【讨论】:

    【解决方案4】:

    我发现这些参数令人满意

    对于暖色:

    • R 从 128 到 255
    • G 从 0 到 128
    • B 从 0 到 R

    对于冷色:

    • R 从 0 到 B
    • G 从 0 到 255
    • B 从 128 到 255

    请注意,高绿色会使颜色更冷(在我看来,但这值得商榷^^),这就是为什么它仅限于暖色但不适用于冷色。

    【讨论】:

      【解决方案5】:

      暖色有更多的红色, 冷色有更多的蓝色。

      在 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
      }
      

      【讨论】:

        【解决方案6】:

        简单准确:

            def is_hot(a):
                return (a[..., 'RED'] > 128)
        

        其中 'RED' 代表数组 a 中红色通道的索引。

        这很有效 - 您可以通过以下方式亲自查看:(a) 查看 Fabian Fagerholm 的第二个轮子和/或 (b) 转到以下链接,然后将杆向上和向下移动到两个温暖的末端。

        https://www.colorspire.com/rgb-color-wheel/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-08-06
          • 1970-01-01
          • 1970-01-01
          • 2020-07-05
          • 2012-03-25
          • 1970-01-01
          • 2016-12-15
          相关资源
          最近更新 更多