如果我得到一种浅灰色(例如R=G=B=200)和一种深色(例如R=46,G=41,B=35),我想将它们都归入简单的灰色组(想象一个表)。
那么,如何将颜色组织到颜色组中呢?
发布于 2011-12-11 00:28:17
对于颜色的视觉分类,首先将颜色转换为HSL or HSV通常更容易。要检测灰度,可以检查饱和度是否低于某个阈值。要检测任何其他颜色,请检查Hue。
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
发布于 2011-12-10 23:43:16
有几种方法可以对颜色进行分类。一种方法是将rgb视为3d坐标,然后所有可能的颜色都可以在位于(255,255,255)处的原始处为黑色和对角处为白色的长方体或立方体中表示。所有的灰色将被放置在靠近对角线的位置。以及靠近中轴线的红色、绿色和蓝色。这样,分类问题就转化为在3d空间中寻找点(颜色)和线(灰色对角线)之间的最近距离。如果距离低于给定的阈值,则颜色将被归类为灰色。
发布于 2011-12-10 23:51:44
下面的颜色表实现如何:
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();https://stackoverflow.com/questions/8457601
复制相似问题