我没有太多经验进行图像分析,所以我想我会问更开明的人:)
基本上我想做的是分析图像并找出最常见的颜色(显然是平均值)。
有人知道这样做的有效方法吗?如果可能的话,我想避免使用任何第三方库,但至少应该考虑所有内容。
就像我说的那样,我对图像分析没有多少经验,所以如果我不能正确理解你的答案,请耐心等待我!
我已经尝试了谷歌,但似乎没有任何类似我追求的东西。也许今天我的Google-Fu还不够好。
我真的很感激你们能给出的任何指示!
谢谢, 汤姆
答案 0 :(得分:2)
大致了解如何做到这一点:
您可以使用java.awt.image.PixelGrabber
从图像中逐个像素地抓取RGB int数组。
当您填充此数组时,您可以按需要进行排序(听起来像是内存密集型),并执行简单的功能来排序,计算它们等。
然后,您可以查看java.awt.Color
,并使用Color(int, int, int)
构造函数创建包含这些颜色的框(作为可视占位符),其下方出现的出现次数。
要获取颜色的十六进制值,可以使用如下字符串:
String rgb = Integer.toHexString(color.getRGB());
rgb = rgb.substring(2, rgb.length());
(子串是必要的,否则你会得到8个字符)
希望这能让你走上正轨!
答案 1 :(得分:1)
考虑使用RGB而不是XYZ的“彩色立方体”。将立方体拆分为子立方体,但使它们全部重叠。确保它们的大小相同。易于记忆/计算的立方体图案将是从0-127,64-191,128-255在所有方向上的图案,总共27个立方体。对于每个立方体,找到图像中的颜色。
当您使立方体越来越小时,结果会越来越少,并开始收敛于最流行的颜色范围。获得该收敛后,取该范围的平均值即可获得“实际颜色”。
这和我在老板手臂周围盘旋的老板一样多的细节: - )
答案 2 :(得分:1)
我知道你试图避免使用第三方库,但请看看OpenCV。他们有一些好的东西w.r.t图像处理和分析。也许这对你有用。