获得PNG中最常用的颜色

时间:2011-01-04 21:32:20

标签: c# image-processing

我需要使用c#获取png图像文件中最常用的颜色。这样我就可以在图像中绘制一些包含相似颜色的文本。

4 个答案:

答案 0 :(得分:4)

您可以使用colour histogram,将RGB或HSV(取决于您的色彩空间)值采样到类别中。但是,如果您希望通过实际值识别大部分颜色,则必须单独计算每种颜色的出现次数。

答案 1 :(得分:0)

也许有一些库会为你做这件事,但如果没有,我猜你可以循环遍历所有像素,用发现次数制作你找到的所有颜色的地图,最后获得一个最常用的。

答案 2 :(得分:0)

如果您正在查看实际像素值,我会使用排序字典:

SortedDictionary<Color,int>

并遍历所有像素。如果您不知道如何遍历像素,请查看Bitmap.LockBits。出于您的目的,GetPixel会太慢。

编辑:

我对排序并不是100%肯定。我同意CodeInChaos - 无论如何,直字典可能会更快。然后,您必须在字典中单个循环才能获得最常见的值。

答案 3 :(得分:0)

可以使用直方图算法对每种颜色进行计数,但这可能您要查找的内容。非常相似的颜色应该一起计算。

我建议使用八叉树颜色量化,它会自动减少颜色数量,从而将相似的颜色分组到一个桶中。算法的一种描述:http://www.cubic.org/docs/octree.htm

忘记提及:此建议仅适用于24位PNG。对于8位PNG,您已经有一个用于进行颜色分组的调色板。只需要构建一个256值表,并在遇到它时保持每个调色板索引的计数。