我无法将我的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中的代码很差。
答案 0 :(得分:0)
我不确定为什么这在Matlab中有效,而在java中无效 - 除了颜色表示在两个平台上都不会以相同的方式处理(但这是推测)。但是,有一种非常好的方法可以做你想做的事情 - 它没有回答你的具体问题(“什么是错的?”),但它应该让你回到你希望做的事情:
答案 1 :(得分: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's documentation因为它的rgb2gray函数具有这些系数。