我需要使用c#获取png图像文件中最常用的颜色。这样我就可以在图像中绘制一些包含相似颜色的文本。
答案 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值表,并在遇到它时保持每个调色板索引的计数。