0

画像内のオブジェクトの色を調べるために Java を使用しています。imgae からピクセルを取得し、そのピクセルの r、g、b 値を取得できました。

さて、このピクセルがどの色に属しているか知りたいです。そこで、16 進コードを color_names にマップするマップを作成しました。ここで、マップをトラバースして、マップ内のすべてのエントリから最短距離を見つけ、ピクセルまでの距離が最小である 1 つのエントリを見つけ、その色をピクセルに割り当てます。

これが私のコードの一部です:-

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でこれを行うための組み込みのものはありますか? 前もって感謝します

4

1 に答える 1

0

Color には RGB 値を取るコンストラクターがあるため、次のようになります。

g.setColor( new Color(0x00, 0x00, 0xff) );

ソースは:クラスカラー

于 2012-06-21T04:48:20.193 に答える