0

我不能将我的 rgb 图像完全转换为灰色图像..

我的最终图像太暗了,影响了我的工作。

我使用这段代码:

public static BufferedImage rgb2gray(BufferedImage bi)//converter
{
    int heightLimit = bi.getHeight();
    int widthLimit = bi.getTileWidth();

    BufferedImage converted = new BufferedImage(widthLimit, heightLimit, BufferedImage.TYPE_BYTE_GRAY);

    for (int height = 0; height < heightLimit; height++) {
        for (int width = 0; width < widthLimit; width++) {
            Color c = new Color(bi.getRGB(width, height) & 0x00fffff);
            int newRed = (int) ((0.2989f * c.getRed()) * 1.45);//0.2989f
            int newGreen = (int) ((0.5870f * c.getGreen()) * 1.45);//0.5870f
            int newBlue = (int) ((0.1140f * c.getBlue()) * 1.45);
            int roOffset = newRed + newGreen + newBlue;
            converted.setRGB(width, height, roOffset);
        }
    }
    return converted;
}

怎么了?

在 matlab 中结果很完美,但是在 java 中这段代码很差。

4

2 回答 2

0

您的错误似乎是将新的红色、绿色和蓝色值与神秘的 1.45 相乘。

只需删除它并制作您的代码:

int newRed = (int) (0.2989f * c.getRed());
int newGreen = (int) (0.5870f * c.getGreen());
int newBlue = (int) (0.1140f * c.getBlue());

Matlab 的rgb2gray 函数文档有这些系数。

于 2013-05-14T00:14:38.007 回答
0

我不确定为什么这在 Matlab 中而不在 java 中有效——除了颜色表示在两个平台上的处理方式可能不同(但这是推测)。但是,有一种非常好的方法可以做您想做的事情 - 它不会回答您的具体问题(“出了什么问题?”),但它应该让您重新做您希望做的事情:

如何在 Java 中使 BufferedImage 去饱和?

于 2013-05-14T00:12:11.397 回答