java 图片灰度化

本文介绍了一种使用Java实现的图像灰度化处理方法。通过不同的灰度化策略如分量法、最值法、均值法及加权法等,实现了对彩色图像的有效转换。特别是介绍了加权法中按照Y=0.30R+0.59G+0.11B的公式计算灰度值的过程,并提供了完整的代码实现。

http://liuyu314.github.io/java/2014/05/24/grayscale/

public class PictureTest {
    /**
     * 几种灰度化的方法

     分量法:使用RGB三个分量中的一个作为灰度图的灰度值。
     最值法:使用RGB三个分量中最大值或最小值作为灰度图的灰度值。
     均值法:使用RGB三个分量的平均值作为灰度图的灰度值。
     加权法:由于人眼颜色敏感度不同,按下一定的权值对RGB三分量进行加权平均能得到较合理的灰度图像。
     一般情况按照:Y = 0.30R + 0.59G + 0.11B。

     */
    public static void main(String[] args) throws IOException {
        BufferedImage bufferedImage = ImageIO.read(new File(System.getProperty("user.dir") + "/test.jpg"));
        BufferedImage grayImage = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(), bufferedImage.getType());

        for (int i = 0; i < bufferedImage.getWidth(); i++) {
            for (int j = 0; j < bufferedImage.getHeight(); j++) {
                final int color = bufferedImage.getRGB(i, j);
                final int r = (color >> 16) & 0xff;
                final int g = (color >> 8) & 0xff;
                final int b = color & 0xff;
                int gray = (int) (0.3 * r + 0.59 * g + 0.11 * b);
                System.out.println(i + " : " + j + " " + gray);
                int newPixel = colorToRGB(255, gray, gray, gray);
                grayImage.setRGB(i, j, newPixel);
            }
        }
        File newFile = new File(System.getProperty("user.dir") + "/ok.jpg");
        ImageIO.write(grayImage, "jpg", newFile);
    }

    private static int colorToRGB(int alpha, int red, int green, int blue) {

        int newPixel = 0;
        newPixel += alpha;
        newPixel = newPixel << 8;
        newPixel += red;
        newPixel = newPixel << 8;
        newPixel += green;
        newPixel = newPixel << 8;
        newPixel += blue;

        return newPixel;

    }
}

转载于:https://my.oschina.net/u/2385255/blog/737686

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值