如何将一些颜色分类到颜色范围内?

8

如果我有一个灰色(例如R=G=B=200)和一个深色(例如R=46,G=41,B=35),我想将它们归类为简单的灰色组(想象一张表)。

那么,我如何将颜色组织到颜色组中?


你指的“整理颜色”是什么意思? - Ashkan Mobayen Khiabani
你有哪些颜色组? - Magnus
我还没有决定。首先,我想创建算法。(但你可以计算50-60组。) - laszlokiss88
3个回答

21

为了对颜色进行视觉分类,通常最好先将颜色转换为HSL或HSV。要检测灰色,您需要检查饱和度是否低于某个阈值。要检测任何其他颜色,您需要检查色调。

public string Classify(Color c)
{
    float hue = c.GetHue();
    float sat = c.GetSaturation();
    float lgt = c.GetLightness();

    if (lgt < 0.2)  return "Blacks";
    if (lgt > 0.8)  return "Whites";

    if (sat < 0.25) return "Grays";

    if (hue < 30)   return "Reds";
    if (hue < 90)   return "Yellows";
    if (hue < 150)  return "Greens";
    if (hue < 210)  return "Cyans";
    if (hue < 270)  return "Blues";
    if (hue < 330)  return "Magentas";
    return "Reds";
}

你当然可以使用其他的分区。

我制作了一个简单的JavaScript应用程序来测试这个: 颜色分类


嗯,谢谢,我会立即尝试。 - laszlokiss88

2

对颜色进行分类的方式有几种。其中一种方式是将rgb视为三维坐标,所有可能的颜色可以在一个盒子或立方体中表示,其中黑色位于原点,白色位于相反角落,位于(255,255,255)处。所有灰色的颜色都靠近对角线,红、绿和蓝色的颜色靠近轴线。使用这种方法,分类问题已转化为在3D空间中找到点(颜色)与线(灰色对角线)之间的最近距离。如果距离低于给定阈值,则将该颜色分类为灰色。


是的。它基本上与使用HSL / HSV表示相同,但是它已经被转换为圆柱体,而不是立方体。 - danca

-1
以下是颜色表的实现方案,您觉得怎么样?
public class ColorTable
{
    public Color ColorName { get; set; } //can set color code too
    public string GroupName { get; set; }

}

并编写以下代码以生成/获取颜色组:

//Generating Color Group Table
List<ColorTable> MyColorTable = new List<ColorTable>();
MyColorTable.Add(new ColorTable { GroupName = "Gray", ColorName = Color.Gray });
MyColorTable.Add(new ColorTable { GroupName = "Gray", ColorName = Color.LightGray });
MyColorTable.Add(new ColorTable { GroupName = "Green", ColorName = Color.Green });
MyColorTable.Add(new ColorTable { GroupName = "Green", ColorName = Color.LightGreen });

//Getting required Color Group, say "Gray"
List<ColorTable> GreenColor = MyColorTable.Where(c => c.GroupName == "Gray").ToList();

我只是传递了颜色名称,你可以发送带有范围的颜色名称,谢谢。 - Elias Hossain
谢谢,但这不是我问题的答案。 假设你有一种颜色,具有以下RGB值: 55,83,70(非常深的绿色,几乎是灰色)<br> 那么,问题是,这种颜色属于哪个组?绿色还是灰色? (所以我没有任何预定义的颜色,分类到组中,只有一些组名称(带有RGB值),例如绿色和灰色。) <br><br> 但RGB不是必需的,它可以是CMYK或十六进制或任何东西,如果更容易的话。 - laszlokiss88

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