Java彩色图像转化为灰度图像

该文章介绍了一个Java程序,用于将彩色图像转换为灰度图像。方法是通过计算每个像素的RGB值的平均值,然后用这个平均值替换原来的RGB值,从而创建一个所有像素颜色都接近灰色的新图像。最后,程序将转换后的图像保存为新的文件。
摘要由CSDN通过智能技术生成

RGB 颜色模型 – RGB 颜色模型是一种加法混合模型,其中红光、绿光和蓝光以各种方式添加在一起,以再现多种颜色。

灰度图像 –灰度图像是一种黑白或灰色单色图像,仅由灰色阴影组成。对比度范围从强度最弱的黑色到强度最强的白色。

通常,灰度图像的每个像素使用 8 位表示。通过使用8位,我们可以表示从0到255的值。因此,8位表示的灰度图像将是一个矩阵,值可以是0到255之间的任何值。0表示黑色像素,255表示白色像素,并且在从黑色到白色的不同色调之间会出现。

注意:在灰度图像中,图像的 Alpha 分量将与原始图像相同,但 RGB 将发生变化,即每个像素的所有三个 RGB 分量将具有相同的值。

算法:
获取像素点的RGB值。
求RGB的平均值,即Avg = (R+G+B)/3
将像素的 R、G 和 B 值替换为步骤 2 中计算的平均值 (Avg)。
对图像的每个像素重复步骤 1 至步骤 3。

// Java program to demonstrate
// colored to grayscale conversion
  
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
  
public class Grayscale {
    public static void main(String args[])
        throws IOException
    {
        BufferedImage img = null;
        File f = null;
  
        // read image
        try {
            f = new File(
                "C:/Users/hp/Desktop/Image Processing in Java/gfg-logo.png");
            img = ImageIO.read(f);
        }
        catch (IOException e) {
            System.out.println(e);
        }
  
        // get image's width and height
        int width = img.getWidth();
        int height = img.getHeight();
  
        // convert to grayscale
        for (int y = 0; y < height; y++) {
            for (int x = 0; x < width; x++) {
                
                // Here (x,y)denotes the coordinate of image
                // for modifying the pixel value.
                int p = img.getRGB(x, y);
  
                int a = (p >> 24) & 0xff;
                int r = (p >> 16) & 0xff;
                int g = (p >> 8) & 0xff;
                int b = p & 0xff;
  
                // calculate average
                int avg = (r + g + b) / 3;
  
                // replace RGB value with avg
                p = (a << 24) | (avg << 16) | (avg << 8)
                    | avg;
  
                img.setRGB(x, y, p);
            }
        }
  
        // write image
        try {
            f = new File(
                "C:/Users/hp/Desktop/Image Processing in Java/GFG.png");
            ImageIO.write(img, "png", f);
        }
        catch (IOException e) {
            System.out.println(e);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值