Java图片二值化

1. 图像读取与存储

BufferedImage:Java中的BufferedImage类用于表示具有可访问图像数据缓冲区的图像。

ImageIO:ImageIO类提供了方便的方法来读取和写入图像文件。

 2. 灰度图像

灰度值:灰度图像是仅包含灰色阴影的图像,每个像素只有一个亮度值,通常用0(黑色)到255(白色)之间的整数表示。

灰度转换:彩色图像可以通过将其RGB值(红、绿、蓝)转换为单一灰度值来转换为灰度图像。

3. 二值化处理 

    •    阈值法:二值化的基本方法是阈值法,即选择一个阈值,将灰度值大于该阈值的像素设置为白色,低于该阈值的像素设置为黑色。

    •    自适应阈值:自适应阈值法根据图像的局部特性计算阈值,适用于光照不均的图像。

4. 像素操作 

遍历像素:通过双重循环遍历图像中的每个像素,读取其颜色值并进行处理。

颜色模型:图像的每个像素颜色可以分解为红(R)、绿(G)、蓝(B)分量。通过移位和按位与操作可以提取这些分量。

5. 示例代码

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class ImageBinarization {

    public static void main(String[] args) {
        // 输入和输出文件路径
        String inputImagePath = "input.jpg";
        String outputImagePath = "output.jpg";

        try {
            // 读取输入图像
            BufferedImage originalImage = ImageIO.read(new File(inputImagePath));

            // 进行二值化处理
            BufferedImage binaryImage = binarizeImage(originalImage);

            // 保存输出图像
            ImageIO.write(binaryImage, "jpg", new File(outputImagePath));

            System.out.println("图片二值化处理完成,结果保存到: " + outputImagePath);
        } catch (IOException e) {
            System.err.println("无法读取或写入图像文件: " + e.getMessage());
        }
    }

    private static BufferedImage binarizeImage(BufferedImage originalImage) {
        int width = originalImage.getWidth();
        int height = originalImage.getHeight();
        BufferedImage binaryImage = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_BINARY);

        // 设置阈值
        int threshold = 128;

        for (int y = 0; y < height; y++) {
            for (int x = 0; x < width; x++) {
                // 获取像素颜色
                int rgb = originalImage.getRGB(x, y);
                int red = (rgb >> 16) & 0xFF;
                int green = (rgb >> 8) & 0xFF;
                int blue = rgb & 0xFF;

                // 转换为灰度值
                int gray = (red + green + blue) / 3;

                // 二值化处理
                if (gray < threshold) {
                    binaryImage.setRGB(x, y, 0xFF000000); // 黑色
                } else {
                    binaryImage.setRGB(x, y, 0xFFFFFFFF); // 白色
                }
            }
        }

        return binaryImage;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值