我正在使用java來查找圖像中對象的顏色。 我已經從imgae獲得一個像素,然後能夠獲得該像素的r,g,b值。從java中的十六進制代碼獲取顏色名稱
現在,我想知道這個像素屬於哪種顏色。所以我創建了一個將十六進制代碼映射到color_names的映射。現在,我遍歷地圖,並找出地圖中所有條目的最短距離,並將距離最小的一個條目映射到將該顏色分配給像素的像素。
下面是我的一些代碼: -
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 = "abcdef";
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中這樣做是否存在任何內置的東西? 謝謝進階
你只是試圖讓[Web安全顏色(HTTP:// en.wikipedia.org/wiki/Web_colors#Web-safe_colors)? – Makoto
爲了儘快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。熱鏈接到一個小(以字節爲單位)的圖像或在內存中生成一個。 –
我只想指出它看起來紅色或看起來黃色的像素。我只想使用常用的10-15種顏色。 – sachinjain024