我们强烈建议你在下面的帖子中提及此内容。
- Java中的图像处理设置1(读和写)
- Java中的图像处理设置2(获取并设置像素)
在这个集合中, 我们将把彩色图像转换为灰度图像。
注意
(直观地考虑):在灰度图像中, 图像的Alpha分量将与原始图像相同, 但是RGB将被更改, 即, 所有三个RGB分量对于每个像素都具有相同的值。
算法:
- 获取像素的RGB值。
- 求出RGB的平均值, 即Avg =(R + G + B)/ 3
- 将像素的R, G和B值替换为在步骤2中计算的平均值(Avg)。
- 对图像的每个像素重复步骤1到步骤3。
实现
以上算法的:
//Java program to demonstrate colored to greyscale conversion
import java.io.File;
import java.io.IOException;
import java.awt.image.BufferedImage;
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( "G:\\Inp.jpg" );
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 greyscale
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( "G:\\Out.jpg" );
ImageIO.write(img, "jpg" , f);
}
catch (IOException e)
{
System.out.println(e);
}
}
}
注意:该代码无法在在线IDE上运行, 因为它需要磁盘上的映像。
Inp.jpg
Out.jpg
在下一组中, 我们将学习如何在JAVA中将彩色图像转换为负图像。
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
评论前必须登录!
注册