24位RGB图像到8位灰度级字节数组

问题描述:

我正在寻找一些代码片段来将24位RGB图像转换为Java中的8位灰度级字节数组。我在网上进行了探索,但无法找到任何相关材料。24位RGB图像到8位灰度级字节数组

假设我们有一个24位的RGB图像(“C:\ img \ face.jpg”),我们需要将它转换为8位灰度级字节数组,如byte [] face in Java。

在此先感谢。

+0

我假定'byte'阵列是假设包含的像素数据... – MadProgrammer 2014-12-03 07:26:02

+0

[灰度converstion的实施例](HTTP:// stackoverflo w.com/questions/21899824/java-convert-a-greyscale-and-sepia-version-of-an-image-with-bufferedimage/21900125#21900125) – MadProgrammer 2014-12-03 07:26:29

+0

对不起,我是图像处理新手。我只想做 1.将jpeg图像转换为raw rgb像素数据 2.将原始rgb像素数据转换为灰度像素数据 3.最终输出将是灰度像素数据 – Raman 2014-12-03 09:30:24

在一个“非常”简单的方式,你可以这样做......

try { 
     BufferedImage source = ImageIO.read(new File("C:/img/face.jpg")); 
     BufferedImage gray = new BufferedImage(source.getWidth(), source.getHeight(), BufferedImage.TYPE_BYTE_GRAY); 
     Graphics2D g2d = gray.createGraphics(); 
     g2d.drawImage(source, 0, 0, null); 
     g2d.dispose(); 

     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     ImageOutputStream ios = ImageIO.createImageOutputStream(baos); 
     ImageIO.write(gray, "png", ios); 
     ios.close(); 

     byte[] array = baos.toByteArray(); 
    } catch (IOException ex) { 
     Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex); 
    } 

的字节数组将包含实际的PNG图像,而不是原始像素数据,这表现here,这是很重要的!

您还可以使用类似...

BufferedImage gray = new BufferedImage(source.getWidth(), source.getHeight(), BufferedImage.TYPE_INT_ARGB); 

ColorConvertOp op = new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null); 
op.filter(source, gray); 

的图像转换为灰度为证明here

如果你从字面上想要的像素数据,你也许能够做一些事情像...

WritableRaster raster = gray.getRaster(); 
DataBufferByte data = (DataBufferByte) raster.getDataBuffer();  
byte[] rawPixels = data.getData(); 
+0

我想补充一点,平均R,G, B通道不是转换为灰色的最佳公式。更多这里:http://www.johndcook.com/blog/2009/08/24/algorithms-convert-color-grayscale/ – Blitzkr1eg 2014-12-03 07:43:13

+0

@ Blitzkr1eg这很好,你有在Java的例子吗? – MadProgrammer 2014-12-03 07:46:25

+0

@MadProgrammer - 它会以下列方式工作吗? 1.将jpeg图像转换为raw rgb像素数据2.将原始rgb像素数据转换为灰度像素数据3.最终输出将为灰度像素数据 – Raman 2014-12-03 09:32:55