java - 查找图像的平均颜色

标签 java

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

  1. 将图像的缩放实例制作为 1 x 1 大小的图像,并查找新创建的图像的颜色作为平均颜色
  2. 使用两个 for 循环。最里面的用于对每行进行平均,辅助 for 循环用于对每行逐像素进行平均。

我真的很喜欢第一个解决方案的想法,但我不确定它有多准确。第二种解决方案将尽可能准确,但它看起来非常乏味。我还相信 getColor 命令在大规模上是处理器密集型的(例如,我平均每秒执行此操作大约 640 到 1920 次),如果我错了,请纠正我。由于此方法将非常占用 CPU 资源,因此我想使用相当有效的算法。

最佳答案

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

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

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

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

关于java - 查找图像的平均颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13328619/

相关文章:

java - 在哪里定义 @CircuitBreaker(name = BACKEND, FallbackMethod = "fallback") 的名称?

Java:使用并行流复制文件

java - 使 MySQL 以英语(而不是波斯语)存储所有数字

java - 处理算术异常

java - Kafka Streams 关闭处理器的状态存储

java - 给出在 Java 中重载和覆盖的情况下演示协变和逆变的函数示例?

java - 如何在Java中打开文件夹/目录

Java - 处理对象的本地化字段

java - 每次应用程序重新启动时 Spring Integration 都会加载文件

java.lang.StackOverflowError 添加设置以设置自身