为灰度图像添加颜色

时间:2013-11-13 22:53:04

标签: java image-processing colors imaging

我希望为灰度图像添加颜色;它不一定是准确的颜色表示,而是为不同的灰色阴影添加颜色,这只是为了识别图像中不同的感兴趣区域。例如。植被区域可能具有相似的灰色阴影,通过在这个值范围内添加颜色,应该清楚哪些区域是植被,哪些是水等。

我有从图像中获取颜色并将它们存储为颜色对象的代码,但这似乎没有提供修改值的方法。 例如。如果灰色谷值小于85,则颜色为红色,如果在86和170之间为绿色,在171和255之间为蓝色。我不知道这看起来如何,但理论上结果图像应该允许用户识别不同的区域。

我获取像素值的当前代码低于。

int total_pixels = (h * w);
Color[] colors = new Color[total_pixels];

for (int x = 0; x < w; x++)
{
  for (int y = 0; y < h; y++)
  {
    colors[i] = new Color(image.getRGB(x, y));
    i++;
  }
}
for (int i = 0; i < total_pixels; i++)
{
  Color c = colors[i];
  int r = c.getRed();
  int g = c.getGreen();
  int b = c.getBlue();
  System.out.println("Red " + r + " | Green " + g + " | Blue " + b);
}

我感谢任何帮助!非常感谢

2 个答案:

答案 0 :(得分:2)

您将不得不选择自己的方法将颜色从灰度方案转换为您想要的任何颜色。

在你给出的例子中,你可以做这样的事情。

public Color newColorFor(int pixel) {
    Color c = colors[pixel];
    int r = c.getRed();  // Since this is grey, the G and B values should be the same
    if (r < 86) {
        return new Color(r * 3, 0, 0);  // return a red
    } else if (r < 172) {
        return new Color(0, (r - 86) * 3, 0); // return a green
    } else {
        return new Color(0, 0, (r - 172) * 3); // return a blue
    }
}

你可能需要玩一下才能获得最佳算法。我怀疑上面的代码实际上会让你的图像看起来很黑暗。使用较浅的颜色会让你感觉更好。例如,您可以将上面代码中的每个0更改为255,这将为您提供黄色,品红色和青色的阴影。这将是一个很多的试验和错误。

答案 1 :(得分:0)

我建议你看看Java2D。它有许多课程可以让你的生活更轻松。如果忽略它,你最终可能会重新发明轮子。

以下是您可以做的简短展示:

    int width = 100;
    int height = 100;
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    image.getRGB(x, y);
    Graphics2D g2d = (Graphics2D)image.getGraphics();
    g2d.setColor(Color.GREEN);
    g2d.fillRect(x, y, width, height);