如果我得到浅灰色(例如R = G = B = 200)和暗色(例如R = 46,G = 41,B = 35),我想将它们分类为简单的灰色组(想象一个表)。
那么,我如何将颜色组织成颜色组呢?
答案 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();