我想把一个黑白的线条的手绘图片转换成一个矩阵存储,黑用0,白用1,请问用java如何实现

比如这幅图
2025-05-23 16:16:00
推荐回答(1个)
回答(1):

import java.io.File;
import java.io.FileInputStream;
public class Test {
    /**
     * 将图片转成0/1矩阵
     * @param imagePath
     * @return
     * @throws IOException
     */
    public int[][] imgMtr(String imagePath) throws Exception {
        java.awt.image.BufferedImage image = 
                javax.imageio.ImageIO.read(new FileInputStream(new File(imagePath)));
        int w = image.getWidth();
        int h = image.getHeight();
        int[][] mtr = new int[h][w]; // 存储矩阵

        for (int i = 0; i < h; i++) {
            for (int j = 0; j < w; j++) {
                int rgb = image.getRGB(j, i);  //aRGB                
                // 依次检查R、G、B是否超过阈值
                // 超过视为白色,否则黑色
                int r = (rgb & 0x00ff0000) >> 16;
                int g = (rgb & 0x0000ff00) >> 8;
                int b = (rgb & 0x000000ff);
                int a = 0xff / 2;  //阈值, 可根据需要设定
                if (r > a && g > a && b > a) {
                    mtr[i][j] = 1;
                } else {
                    mtr[i][j] = 0;
                }
            }
        }
        return mtr;
    }

    public static void main(String[] args) throws Exception {
        Test test = new Test();
        int[][] result = test.imgMtr("F:\\hex.jpg");
        for (int[] row : result) {
            for (int col : row) {
                System.out.print(col);
            }
            System.out.print("\n");
        }
    }
}