如何应用,将图像从彩色算法转换为灰度算法到Android?

时间:2010-10-28 18:11:27

标签: android colors rgb grayscale

我正在尝试使用其中一种算法将RGB图像转换为灰度:

  

亮度方法平均最突出和最不突出的颜色:    (max(R,G,B)+ min(R,G,B))/ 2。

     

平均方法简单地平均值:(R + G + B)/ 3.

     

发光度的公式为0.21 R + 0.71 G + 0.07 B。

但我得到了非常奇怪的结果!我知道还有其他方法可以实现这一目标但是有可能这样做吗?

以下是代码:

for(int i = 0 ; i < eWidth*eHeight;i++){
        int R = (pixels[i] >> 16) ;     //bitwise shifting
        int G = (pixels[i] >> 8) ;
        int B = pixels[i] ;
        int gray = (R + G + B )/ 3 ;
        pixels[i] = (gray << 16) | (gray << 8) | gray   ;
}

4 个答案:

答案 0 :(得分:2)

你需要去掉那些不属于你所获得组件的部分,特别是如果轮班中有任何符号扩展名。

    int R = (q[i] >> 16) & 0xff ;     //bitwise shifting 
    int G = (q[i] >> 8) & 0xff ; 
    int B = q[i] & 0xff ; 

答案 1 :(得分:1)

你所做的一切对我来说都很好..

我曾经在java中以同样的方式做过这件事。 获得RGB的0-255色值的平均值,以获得灰度,它看起来很像你的。

public int getGray(int row, int col) throws Exception
{
     checkInImage(row,col);
     int[] rgb = this.getRGB(row,col);
     return  (int) (rgb[0]+rgb[1]+rgb[2])/3;
}

答案 2 :(得分:1)

您当然可以修改Java中的每个像素,但效率非常低。如果您有选项,我会使用ColorMatrix。有关详细信息,请参阅Android文档:http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/ColorMatrixSample.html

您可以将矩阵的饱和度设置为0,使其成为灰度。

如果你真的想用Java做,你可以按照你的方式去做,但你需要首先屏蔽每个元素,即将& 0xff应用到它。

答案 3 :(得分:1)

我知道你不是要求如何对此进行编码,而是为了算法?

根据http://www.dfanning.com/ip_tips/color2gray.html

,没有“正确”的算法

他们使用

Y = 0.3*R + 0.59*G + 0.11*B