0

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

我有从图像中获取颜色并将它们存储为颜色对象的代码,但这似乎没有提供修改值的方法。例如,如果灰度值小于 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);
}

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

4

2 回答 2

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,这将为您提供黄色、洋红色和青色的阴影。这将是大量的试验和错误。

于 2013-11-13T23:10:33.757 回答
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);
于 2013-11-13T23:04:38.243 回答