【发布时间】:2011-04-21 19:19:12
【问题描述】:
那里... 我对使用 java 进行图像处理的作业有一些疑问。我的问题 : java编程中如何获取rgb图像每个像素的灰度值???
我只知道一点关于如何通过语法 image.getRGB(x,y) 获取每个像素的 rgb 值以返回 rgb 值。我不知道要获取图像的每个像素的灰度值....
感谢提前
【问题讨论】:
标签: java image-processing
那里... 我对使用 java 进行图像处理的作业有一些疑问。我的问题 : java编程中如何获取rgb图像每个像素的灰度值???
我只知道一点关于如何通过语法 image.getRGB(x,y) 获取每个像素的 rgb 值以返回 rgb 值。我不知道要获取图像的每个像素的灰度值....
感谢提前
【问题讨论】:
标签: java image-processing
首先,您需要从image.getRGB(x, y) 获得的每个像素中提取红色、绿色和蓝色值。请参阅this answer。然后阅读converting color to grayscale。
【讨论】:
我同意前面的回答。创建 BufferedImage,如 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY)。据我了解,光栅用于读取像素数据,而可写光栅用于写入像素数据或更新像素。我总是使用可写光栅,尽管这可能不是最好的方法,因为您可以读取像素数据并设置像素值。您可以通过 WritableRaster raster = image.getRaster();然后,您可以使用 raster.getSample(x, y, 0); 获取像素的值参数中的 0 是您想要获得的波段,对于灰度图像应该是 0。
【讨论】:
你也可以设置一个TYPE_BYTE_GRAY类型的BufferedImage,然后在里面绘制图片,然后获取光栅数据并找到值。
【讨论】:
补充丹尼尔的回答:
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.
}
}
【讨论】: