计算图片灰度值

获取图片的每一个像素点的字节数据,根据灰度值的加权公式计算出单个像素的灰度值,将整体灰度值相加除总像素。

/**
 * 识别图片的色调
 */
public class ImageToneDetect {

    /**
     * 计算一个图片的RGB深浅度,返回一个值在0-100之间,值越大,图片颜色越深,值越小,图片颜色越淡,例如偏白色
     * @param bytes
     * @return
     */
    public static Integer getRgbToneValue(byte[] bytes) throws IOException {
        ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
        BufferedImage image = ImageIO.read(bais);
        int width = image.getWidth();
        int height = image.getHeight();
        long totalLuminance = 0;
        int pixelCount = 0;

        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                int rgb = image.getRGB(x, y);
                int r = (rgb >> 16) & 0xff;
                int g = (rgb >> 8) & 0xff;
                int b = rgb & 0xff;
                // 使用RGB到灰度的转换公式
                int luminance = (int) (0.299 * r + 0.587 * g + 0.114 * b);
                totalLuminance += luminance;
                pixelCount++;
            }
        }

        double averageLuminance = (double) totalLuminance / pixelCount;
        // 归一化到0-100之间,假设一个阈值将亮度值映射到该范围
        double toneValue = (averageLuminance / 255.0) * 100;
        // 反转值,使亮度越高值越小,亮度越低值越大(偏白色值越小)
        return 100 - (int)Math.round(toneValue);
    }
    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值