查找图像的平均颜色

时间:2012-11-11 04:35:55

标签: java

我使用BufferedImage来保存10 x 10的图像样本。使用此图像,我想找到代表此图像的近似平均颜色(作为Color对象)。目前,我有两个关于如何实现此功能的想法:

  1. 将图像的缩放实例制作成1 x 1尺寸的图像,并找到新创建的图像的颜色作为平均颜色
  2. 使用两个for循环。最内部用于平均每条线,次要for-loop用于逐像素地平均每条线。
  3. 我非常喜欢第一种解决方案的想法,但我不确定它会有多准确。第二种解决方案就像它们来的那样准确,但它看起来非常单调乏味。我也相信getColor命令是大规模的处理器密集型(我平均每秒执行640至1920次平均值),如果我错了,请纠正我。由于这种方法非常耗费CPU,我想使用一种相当有效的算法。

1 个答案:

答案 0 :(得分:1)

这取决于你的平均值。如果你有一半像素红色和一半像素蓝色,平均值是紫色吗?在这种情况下,我认为您可以尝试添加所有值并将其除以您拥有的像素数。

然而,我怀疑你想要主导色而不是平均色吗?

在这种情况下,一种替代方案可以是将颜色分为“桶”(例如,间隔为100,或者在极端情况下为3,一为红色,一为绿色,一为蓝色),以及创建一个直方图(一个带有计数的简单数组)。然后你会拿到计数最多的桶。

注意事项1.请记住,缩放通常是通过抽样进行的。由于您的图像非常小,因此您已经丢失了大量信息。进一步缩小可能只是采样几个像素而不是真正平均所有像素。更好地检查缩放过程使用的算法。