java 获取颜色_在java中从十六进制代码获取颜色名称

我使用java来查找图像中对象的颜色。

我已经从imgae获得一个像素,然后能够获得该像素的r,g,b值。

现在,我想知道这个像素属于哪种颜色。所以我创建了一个将十六进制代码映射到color_names的映射。现在,我遍历地图并找出地图中所有条目的最短距离,并将距离最小的一个条目映射到将该颜色分配给像素的像素。

这是我的一些代码: -

private static String getColorName(int[] rgb) {

Map data = new HashMap();

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中这样做是否存在任何内置的东西?

谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值