目前我有一个 Color
对象列表。每个的格式都是 RGB
格式,这意味着,例如,0, 0, 0
将是黑色。
我有兴趣遍历此列表并对其进行直方图排序。找出最常出现的颜色和出现频率最低的颜色。我有一个问题是如何对颜色值进行分类?给定一个 double 列表,您可以通过找到其范围来对值进行分箱,然后将其除以您想要的分箱数。不确定如何通过 Color
对象实现这一目标。
我目前有一段代码使用了 LINQ:
var cs = new List<Color> {
Color.White,
Color.Black
};
var max = cs.OrderByDescending(x => (0.2125 * x.R) + (0.7154 * x.G) + (0.0721 * x.B)).Last();
它获取我的颜色列表,找到该列表的“最大”值,并根据输出是最大还是输出 White
或 Black
分钟。
总而言之,我对用于颜色列表的 .Mode()
方法很感兴趣。
最佳答案
对于计算模式,请尝试使用 ToLookup
进行排序:
var ordered = cs.ToLookup(c => c).OrderByDescending(c => c.Count()).First().Key;
更新:
您也可以创建一个扩展方法:
public static Color Mode(this IEnumerable<Color> colors)
{
return colors.ToLookup(c => c).OrderByDescending(c => c.Count()).First().Key;
}
关于c# - 给定一个颜色对象列表,找到出现频率最高/最少的颜色,并将其作为颜色对象返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21047404/