在Codenameone中将彩色图像转换为灰度

时间:2016-03-15 01:04:04

标签: codenameone

有人能告诉我如何将RGB图像对象转换为灰度吗?我知道有很多关于如何在Java中执行此操作的信息,但我只想得到针对Codenameone的答案,以便其他人可以从中受益。

我正在尝试实施image binarization using Otsu’s algorithm

2 个答案:

答案 0 :(得分:1)

您可以使用Image.getRGB()然后按照以下答案中的说明修改数组:

Convert Image to Grayscale with array matrix RGB java

请注意,上面的答案有点过于简单,因为它没有考虑到每个颜色通道的正确重量以获得适当的灰度效果,但这取决于你的挑剔级别。

然后将此版本的createImage与结果数组一起使用。

答案 1 :(得分:0)

对于任何寻求简化方法(不使用矩阵)的人,Shai都提供了一些示例代码

int[] rgb = image.getRGB();
for(int k = 0;k<rgb.length;k++)
{
    if(rgb[k]!=0)
    {
        int r = rgb[k]/256/256;
        rgb[k]=rgb[k]-r*0x10000;
        int g = rgb[k]/256;
        rgb[k]=rgb[k]-g*0x100;
        int b = rgb[k];
        int intensity = (int)Math.round(((r+g+b)/(256.0*3.0))*256);
        rgb[k] = intensity+(intensity*256)+intensity*(256*256);
    }
}
Image grayImage = Image.createImage(rgb,image.getWidth(),image.getHeight());