2014-12-03 178 views
0

我正在尋找一些代碼片段來將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

回答

1

在一個「非常」簡單的方式,你可以這樣做......

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