首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将某些颜色分类到颜色范围?

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

Stack Overflow用户
提问于 2011-12-10 23:32:18
回答 3查看 7.9K关注 0票数 6

如果我得到一种浅灰色(例如R=G=B=200)和一种深色(例如R=46,G=41,B=35),我想将它们都归入简单的灰色组(想象一个表)。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-11 00:28:17

对于颜色的视觉分类,首先将颜色转换为HSL or HSV通常更容易。要检测灰度,可以检查饱和度是否低于某个阈值。要检测任何其他颜色,请检查Hue。

代码语言:javascript
复制
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

票数 20
EN

Stack Overflow用户

发布于 2011-12-10 23:43:16

有几种方法可以对颜色进行分类。一种方法是将rgb视为3d坐标,然后所有可能的颜色都可以在位于(255,255,255)处的原始处为黑色和对角处为白色的长方体或立方体中表示。所有的灰色将被放置在靠近对角线的位置。以及靠近中轴线的红色、绿色和蓝色。这样,分类问题就转化为在3d空间中寻找点(颜色)和线(灰色对角线)之间的最近距离。如果距离低于给定的阈值,则颜色将被归类为灰色。

票数 2
EN

Stack Overflow用户

发布于 2011-12-10 23:51:44

下面的颜色表实现如何:

代码语言:javascript
复制
public class ColorTable
{
    public Color ColorName { get; set; } //can set color code too
    public string GroupName { get; set; }

}

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

代码语言:javascript
复制
//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();
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8457601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档