2011-11-21 67 views
4

我有一個類型爲TYPE_BYTE_GRAY的BufferedImage,我需要在x,y處獲取像素值。我知道我不能使用getRGB,因爲它返回錯誤的顏色模型,所以我該如何解決它?非常感謝!如何獲取灰度圖像中的像素值

+0

你是什麼意思getRGB返回錯誤的顏色模型?什麼是回報它? –

回答

2

通過調用getData()方法從BufferedImage獲取java.awt.image.Raster

然後接收到的對象,其中b是顏色通道(其中每種顏色由8位表示)上使用

int getSample(int x, int y, int b) 

對於灰度

b = 0. 

對於RGB圖像

b = 0 ==>> R channel, 
b = 1 ==>> G channel, 
b = 2 ==>> B channel. 
+0

看過這些方法後,這看起來很可能是這樣做的。似乎int b是柵格的「帶」,我不太清楚這意味着什麼,並相信我已經在線觀看。我假設我有一個灰度圖像,它只有一個樂隊,因此我希望b等於0? – cherryduck

+0

非常感謝你。我已經實現了它,我得到了更加理智的結果:-) – cherryduck

1

我想你要找的是數學獲得一個數字來表示在RGB的灰度等級,也有一些差異的方式,遵循其中的一些:

明度方法平均最(R,G,B)+ min(R,G,B))/ 2.

平均方法簡單地平均值:(R + G + B)/ 3 。

發光度法是一個更復雜的版本的平均 米ethod。它也對這些值進行平均,但它形成了加權平均值 以說明人類的看法。我們對綠色比其他顏色更敏感,所以綠色的權重最重。對於 光度的公式是0.21 R + 0.71 G + 0.07 B.

參考:http://www.johndcook.com/blog/2009/08/24/algorithms-convert-color-grayscale/

+1

好的,謝謝,我會研究一下。無論如何,當我的圖像在灰度上已經顯示時,必定有一種簡單的方法可以直接從圖像中獲取像素值? – cherryduck

0

只要有一個名爲grayImg其類型是TYPE_BYTE_GRAY

int width = grayImg.getWidth(); 

int height = grayImg.getHeight(); 

byte[] dstBuff = ((DataBufferByte) grayImg.getRaster().getDataBuffer()).getData(); 

然後BufferedImage的在(x中的灰度值,y)簡單地說就是:

dstBuff[x+y*width] & 0xFF; 
相關問題