我正在使用 java 来找出图像中对象的颜色。我从 imgae 获得了一个像素,然后能够获得该像素的 r、g、b 值。
现在,我想知道这个像素属于哪个颜色。所以我创建了一个映射十六进制代码到颜色名称的映射。现在,我遍历地图并找出地图中所有条目的最短距离,以及与像素距离最小的一个条目,我将该颜色分配给像素。
这是我的一些代码:-
private static String getColorName(int[] rgb) {
Map<String, String> data = new HashMap<String, String>();
data.put("00ff00", "GREEN");
data.put("ff0000", "RED");
data.put("0000ff", "BLUE");
data.put("00ffff", "CYAN");
data.put("ffff00", "YELLOW");
data.put("ff00ff", "PINK");
data.put("c8c8c8", "LIGHT GREY");
//data.put("808080", "GREY");
data.put("ffc800", "ORANGE");
data.put("4F3E86", "PURPLE");
data.put("000000", "BLACK");
data.put("ffffff", "WHITE");
String hex = "0123456789abcdef";
int minD = 256*256*256;
String res = "";
for (String key : data.keySet()) {
int r = hex.indexOf(key.charAt(0))*16 + hex.indexOf(key.charAt(1));
int g = hex.indexOf(key.charAt(2))*16 + hex.indexOf(key.charAt(3));
int b = hex.indexOf(key.charAt(4))*16 + hex.indexOf(key.charAt(5));
int distance = (Math.abs(rgb[0] - r)) +
(Math.abs(rgb[1] - g)) +
(Math.abs(rgb[2] - b));
if (distance < minD) {
res = data.get(key);
minD = distance;
}
}
return res;
}
现在的问题是,
如您所见,距离函数为:- D = |r1-r2| + |g1-g2| + |b1-b2| 其中 |x| 表示 abs(x) 函数 我的黄色被映射到灰色。经过一番调试,我发现了这个。我应该选择什么距离函数或如何改进我的映射?
在 java 中是否有任何内置的东西可以做到这一点?感谢广告