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

时间:2011-12-10 15:32:18

标签: c# wpf colors rgb

如果我得到浅灰色(例如R = G = B = 200)和暗色(例如R = 46,G = 41,B = 35),我想将它们分类为简单的灰色组(想象一个表)。

那么,我如何将颜色组织成颜色组呢?

3 个答案:

答案 0 :(得分:15)

对于颜色的视觉分类,通常更容易将颜色转换为HSL or 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应用程序来测试它:Color classification

答案 1 :(得分:1)

有几种方法可以对颜色进行分类。一种方法是将rgb视为一个三维坐标,然后所有可能的颜色都可以在原始黑色的盒子或立方体内表示,而对角中的白色则位于(255,255,255)。然后所有灰色的颜色都将靠近对角线。 靠近轴线的红色,绿色和蓝色。 这样,分类问题已被转换为在3d空间中找到点(颜色)和线(灰色对角线)之间的最近距离。如果距离低于给定的threashold,则颜色将被分类为灰色。

答案 2 :(得分:-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();