0

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

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

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

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

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

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

谢谢,汤姆

4

3 回答 3

2

关于如何做到这一点的粗略想法:
您可以使用java.awt.image.PixelGrabber逐个像素地从图像中获取 RGB 整数的 2D 数组。

当你填充了这个数组时,你可以按照你的意愿进行排序(听起来像是内存密集型的),并执行简单的函数来对它们进行排序、计数等。

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

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

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

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

希望这能让你走上正确的道路!

资源:颜色类图像类

于 2010-07-13T16:24:54.477 回答
1

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

于 2010-07-13T16:28:36.467 回答
1

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

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

这是关于我的老板在立方体农场周围徘徊的尽可能多的细节:-)

于 2010-07-13T16:10:26.057 回答