gpt4 book ai didi

java - 在Java中将彩色图像转换为灰度图像

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:34:12 24 4
gpt4 key购买 nike

我想在没有太多预定义方法的情况下将彩色图像转换为灰度图像。

读取彩色图像的代码在这里

主要方法:

BufferedImage img = null;
try {
img = ImageIO.read(new File(IMG));

int[][] pixelData = new int[img.getHeight() * img.getWidth()][3];
int[] rgb;

int counter = 0;
for (int i = 0; i < img.getWidth(); i++) {
for (int j = 0; j < img.getHeight(); j++) {
rgb = getPixelData(img, i, j);

for (int k = 0; k < rgb.length; k++) {
pixelData[counter][k] = rgb[k];
}
counter++;
}
}
} catch (IOException e) {
e.printStackTrace();
}

另一种方法:

private static int[] getPixelData(BufferedImage img, int x, int y) {
int argb = img.getRGB(x, y);
int rgb[] = new int[] {
(argb >> 16) & 0xff, //red
(argb >> 8) & 0xff, //green
(argb ) & 0xff //blue
};

System.out.println("rgb: " + rgb[0] + " " + rgb[1] + " " + rgb[2]);
return rgb;
}

我需要将输出转换为灰度...这是一些输出

 rgb: 255 255 255
rgb: 255 255 255
rgb: 255 255 255
rgb: 255 255 255
rgb: 255 255 255
rgb: 255 255 255

我需要检查每个像素的 RGB 并将其转换为灰度。

最佳答案

快速而肮脏的方法是:

    int avg = (( rgb[0] + rgb[1] + rgb[2]) / 3);

int grey_rgb = 0;
for(int i = 0; i < 4; i++) {
grey_rgb <<= 8;
grey_rgb |= avg & 0xFF;
}

img.setRGB(x, y, grey_rgb );

当其所有 RGB 分量都包含相同的值(例如 240 240 240)时,会获得灰色的细微差别。为了实现这一点,我们只需要颜色的 RGB 分量的数字表示的平均值。

有关更高级的算法,请查看:tannerhelland.com/3643/grayscale-image-algorithm-vb6。

关于java - 在Java中将彩色图像转换为灰度图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46540646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com