0

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

  1. 将图像的缩放实例制作成 1×1 大小的图像,并找到新创建的图像的颜色作为平均颜色
  2. 使用两个 for 循环。最内层用于平均每条线,二级for循环用于逐像素平均每条线。

我真的很喜欢第一个解决方案的想法,但是我不确定它有多准确。第二种解决方案将与它们一样准确,但它似乎非常乏味。我也相信这个getColor命令在大规模上是处理器密集型的(我平均每秒执行 640 到 1920 次),如果我错了,请纠正我。由于这种方法会占用大量 CPU,因此我想使用一种相当有效的算法。

4

1 回答 1

1

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

但是,我怀疑您想要主色而不是平均值?

在这种情况下,一种替代方法是将颜色离散化为“桶”(例如以 100 个间隔,或者在极端情况下甚至更稀疏,只有 3 个,一个用于红色,一个用于绿色,一个用于蓝色),并创建一个直方图(一个带计数的简单数组)。然后,您将取出计数最多的桶。

小心想法 1。请记住,缩放通常是通过采样进行的。由于您的图像非常小,因此您已经丢失了很多信息。进一步缩小可能只会采样几个像素,而不是真正平均所有像素。更好地检查您的缩放过程使用的是什么算法。

于 2012-11-11T05:04:21.510 回答