如何在java中获取图像的每个像素的灰度级

时间:2011-04-21 19:19:13

标签: java image-processing

...有 我对使用java进行图像处理的作业有些疑问。我的问题 : 如何在java编程中获取rgb图像的每个像素的灰度值?

我只知道如何通过语法image.getRGB(x,y)获得每个像素的rgb值,以获得返回rgb值。我不知道要获得图像的每个像素的灰度值......

感谢您提前

4 个答案:

答案 0 :(得分:1)

首先,您需要从image.getRGB(x, y)获得的每个像素中提取红色,绿色和蓝色值。请参阅this answer。然后阅读converting color to grayscale

答案 1 :(得分:1)

我同意之前的回答。创建BufferedImage,如BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_BYTE_GRAY)。根据我的理解,光栅用于读取像素数据,而可写光栅用于写入像素数据或更新像素。我总是使用可写光栅,虽然这可能不是最好的方法,因为你可以读取像素数据和设置像素值。您可以通过WritableRaster获取栅格raster = image.getRaster();然后,您可以使用raster.getSample(x,y,0)获取像素的值;参数中的0表示您想要获得的色带,灰度图像应为0。

答案 2 :(得分:0)

您还可以设置TYPE_BYTE_GRAY类型的BufferedImage,并将图片绘制到其中,然后获取栅格数据并找到值。

答案 3 :(得分:0)

补充丹尼尔的回答:

WritableRaster wr = myBufferedImage.getRaster();

for(int i = 0; i < myBufferedImage.getWidth(); i++){
    for(int j = 0; j < myBufferedImage.getHeight(); j++){
        int grayLevelPixel = wr.getSample(i, j, 0);
        wr.setSample(i, j, 0, grayLevelPixel); // Setting same gray level, will do nothing on the image, just to show how.
    }
}