我有问题,我需要弄清楚图标的主要颜色,并选择了"最近的" c#中列表中的颜色。
首先我有一个带颜色的列表,例如:
我有一个图标列表:
现在我想在每个图标中获取主色,而不是获得颜色,这与预定义列表之一尽可能相似。
我的第一个解决方案是,从每个图标像素中获取RGB值,然后通过像素的数量,然后我只得到一些棕色和灰色。
是否有人有解决此问题的方法?
非常感谢!
答案 0 :(得分:1)
我有一个想法(假设我正确理解你的问题,如果我没有,请纠正我)。首先让我重新陈述我对你帖子的评论:
我猜你会得到奇怪的颜色,因为你是分别取每个颜色成分的平均值。理论上听起来不错,但如果您的图像中有许多不同的颜色,它可能会摒弃您的答案。假设您的图标是每个255 R,255 G和255 B的33%......您的“颜色”将是每个的约85%(也称为深灰色)。就平均而言,这不是必须的。
所以这是我提出的技术(再次,假设我明白你是最常见的颜色,而不是平均颜色):
您可以做的是,使用一些误差范围(比较RBG值)存储(以您认为合适的任何结构)列表中的哪种颜色与每个像素“最接近”。然后,在考虑了所有像素并将其“投票”应用于您的数据结构后,请查看列表中哪种颜色与该颜色关联的大多数像素。然后那种颜色就是“赢家”。
答案 1 :(得分:1)
你得到的是平均颜色 - 对于大多数图像来说,这是一种棕灰色。听起来你想要的是最“常见”的颜色 - 尝试制作一个Dictionary<color, int>
并在循环浏览图像中的每个像素时,检查颜色是否在字典中有一些误差(10%可能) ?)如果是,则在字典中增加该值,如果没有,则将其添加到字典中。