【问题标题】:What's the best way to analyse the colours in an image (Java)?分析图像中颜色的最佳方法是什么(Java)?
【发布时间】:2011-03-15 10:00:57
【问题描述】:

我没有太多的图像分析经验,所以我想我会问更多开明的人:)

基本上我想做的是分析图像并找出最常见的颜色是什么(这些显然是平均值)。

有人知道有效的方法吗?如果可能的话,我想避免使用任何第三方库,但至少会考虑一切。

就像我说的,我对图像分析没有太多经验,所以如果我不能正确理解您的答案,请耐心等待!

我已经尝试过 Google,但似乎没有任何类似于我所追求的东西。也许我的 Google-Fu 今天还不够好。

我真的很感激你们能给我的任何指点!

谢谢, 汤姆

【问题讨论】:

  • @Justian:不在这些部分:P
  • 有趣的oO。你住在哪里?编辑:啊。英国。明白了。有时我最终会写 Color 而不是 Color,因为我就是这样长大的。不过,欧洲血统不是英国。凉爽的!抱歉占用时间:P

标签: java image colors analysis color-palette


【解决方案1】:

大致了解如何做到这一点:
您可以使用java.awt.image.PixelGrabber 从图像中逐个像素地获取 RGB 整数的二维数组。

当您填充了这个数组后,您可以按照自己的意愿进行排序(听起来会占用大量内存),并执行简单的函数来对它们进行排序、计数等。

然后您可以查看java.awt.Color,并使用Color(int, int, int) 构造函数,使用这些颜色(作为视觉占位符)创建框,并在其下方显示出现次数。

要获取颜色的十六进制值,您可以使用这样的字符串:

    String rgb = Integer.toHexString(color.getRGB());
    rgb = rgb.substring(2, rgb.length());

(子字符串是必需的,否则你会得到 8 个字符)

希望这能让你走上正轨!

资源:Color ClassImage Class

【讨论】:

    【解决方案2】:

    考虑使用 RGB 而不是 XYZ 的“颜色立方体”。将多维数据集拆分为子多维数据集,但使它们全部重叠。确保它们的大小相同。一个易于记忆/计算的立方体模式是从 0-127、64-191、128-255 向各个方向移动,总共有 27 个立方体。对于每个立方体,找出图像中的哪些颜色落入其中。

    随着您使立方体越来越小,结果的变化将越来越小,并开始收敛于最流行的颜色范围。收敛后,取范围的平均值以获得“实际颜色”。

    当我的老板在立方体农场附近徘徊时,我可以尽可能详细地介绍 :-)

    【讨论】:

    • 我认为这似乎是迄今为止最好的方法。我在另一个网站上读到了这种方法(目的略有不同),我认为部分吸引力在于它听起来很酷:P 我仍然想尝试几种不同的方法,看看哪种方法效果最好,但无论如何,谢谢,我会先试试你的:)
    【解决方案3】:

    我知道您试图避免使用第三方库,但请查看 OpenCV。他们有一些好东西 w.r.t 图像处理和分析。也许这对你有用。

    【讨论】:

      猜你喜欢
      • 2016-01-13
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      相关资源
      最近更新 更多