2012-02-02 42 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

相关问题