2012-02-02 67 views
0

其實我正在做一些圖像處理項目,並且遇到了某個地方。我不得不彩色圖像轉換爲灰度並且爲此我已經提取的值REDGREENBLUE的像素的使用GETRGB()Ñ現在我想設置該像素的RGB值部件等於其RGB組件的平均值。 RGB組件分別存儲在INT變量中,因此您是否可以幫助我將此組件的平均值設置爲原始像素值? 代碼的部分是:如何設置特定值到Java中的任何像素?

  rgbArray=new int[w*h]; 
      buffer.getRGB(0, 0, width, height, rgbArray , 0,width); 
      int a,r,g,b; 
      for(int i = 0 ; i<w*h; i++) 
      { 
       r = (0x00ff0000 & rgbArray[i]) >> 16; 
       g = (0x0000ff00 & rgbArray[i]) >> 8; 
       b = (0x000000ff & rgbArray[i]); 
       rgbArray[i] = (r+g+b)/3; 
      } 
      buffer.setRGB(0, 0, width, height, rgbArray , 0,width); 

,但是這不是給我一個灰度圖像。你能告訴我我犯了什麼錯誤嗎?

+2

你能不能給我們更多的上下文?更多的上下文?例如,您嘗試添加此功能的結構代碼會很好。 – 2012-02-02 17:56:08

+1

既然你標記了這個灰度圖,這裏有一句話:人眼對紅色,綠色和藍色不是同樣敏感,所以平均三個分量不會給你一個合適的灰度圖像。 – lhballoti 2012-02-02 18:01:38

+0

是的..當然..我有編輯我的問題.. – Arizvi 2012-02-02 18:25:46

回答

0

目前尚不清楚你想要做什麼。如果您正在嘗試製作灰色,我建議您參考以下頁面:http://www.tayloredmktg.com/rgb/其中顯示了不同灰度陰影的rgb代碼。

如果你想獲得一個半透明的圖像,你必須在java中使用alpha通道(RGBA命令)。您還可以通過以特殊方式將基礎圖像與當前圖像合成來獲得半透明效果,但這比使用Alpha通道要困難得多。

+0

m jst試圖說服彩色圖像灰度多數它.. – Arizvi 2012-02-02 18:32:11

0

您的代碼不會將灰度等級打包回每個顏色組件。另外,正如我在對問題的評論中所說的,轉換爲灰度需要考慮人眼對每種顏色分量的敏感度。獲得灰度級的典型公式爲

G = 0.30 * R + 0.59 * G + 0.11 * B 

as this Wikipedia article states。

所以你for循環應該是這樣的:

for(int i = 0 ; i<w*h; i++) 
{ 
    a = (0xff000000 & rgbArray[i]); 
    r = (0x00ff0000 & rgbArray[i]) >> 16; 
    g = (0x0000ff00 & rgbArray[i]) >> 8; 
    b = (0x000000ff & rgbArray[i]); 
    int gray = (int)(0.30 * r + 0.59 * g + 0.11 * b); 
    if (gray < 0) gray = 0; 
    if (gray > 255) gray = 255; 
    rgbArray[i] = a | (gray << 16) | (gray << 8) | gray; 
} 

你可以,當然,申報gray的循環之外,像你這樣做r

+0

@lhaballpti:你的意思是說我的代碼應該是:rgbArray = new int [w *H]; buffer.getRGB(0,0,width,height,rgbArray,0,width); int a,r,g,b; r =(0x00ff0000&rgbArray [i])>> 16;對於(int i = 0; i > 8; b =(0x000000ff&rgbArray [i]); rgbArray [i] =(int)(0.30 * r + 0.59 * g + 0.11 * b); } buffer.setRGB(0,0,width,height,rgbArray,0,width); – Arizvi 2012-02-03 12:28:49

+0

@Arizvi:查看編輯的答案。 – lhballoti 2012-02-03 12:52:14

+0

@lhaballpti:仍然沒有得到正確的答案。 :(根據你上面編輯的代碼,紅色和綠色出來是正確的,但藍色組件始終是255。我的意思是說,而不是圖像變成灰色,它正在變成有點藍色的顏色... – Arizvi 2012-02-03 13:21:35

相關問題