By looking at the summary of the various Daniel on the net, and self-test summary of the Java Image Grayscale processing method
(1) The pixels in the image we are familiar with have RGB values.
(2) The image grayscale method is roughly divided into four kinds, the first is the maximum method (take the maximum value of the color RGB as the gray value); the second is the minimum method (the minimum value of the color RGB is used as the gray value); The third is the mean method (the average value of the RGB color is the grayscale value) The fourth is the weighted method of grayscale (how to weighted the most suitable, the best effect, Baidu Encyclopedia is said to be comprehensive).
(3) Don't say a word, record the effect and code I have implemented in the four methods described above:
Original
According to the above four methods, the effect of grayscale is as follows four figure
(4) The example code is as follows
Package Testhuidu;import Java.awt.image.bufferedimage;import Java.io.file;import java.io.ioexception;import Javax.imageio.imageio;public class Testhuidu {/** * color component converted to RGB value * @param alpha * @param red * @param green * @param Blue * @return */private static int colortorgb (int alpha, int red, int green, int blue) {int newpixel = 0;newpixel + = Alpha;ne Wpixel = Newpixel << 8;newpixel + = Red;newpixel = Newpixel << 8;newpixel + = Green;newpixel = Newpixel << 8;newpixel + = Blue;return newpixel;} public static void Main (string[] args) throws IOException {grayimage (1, "ff.jpg", "1.jpg");//maximum grayscale grayimage (2, "ff.jpg "2.jpg");//Minimum Gray grayimage (3, "ff.jpg", "3.jpg");//Average method grayscale Grayimage (4, "ff.jpg", "4.jpg");//Weighted method grayscale}/** * Image Grayscale method * @param status Grayscale method, 1 means the maximum method, 2 means the minimum value method, 3 means the mean value method, 4 weighted method * @param imagePath The position of the image that needs to be grayscale * @param the location of the new grayscale image generated after grayscale processing Outpath Place * @throws ioexception */public static void grayimage (int status,string imagePath, String outpath) throws IOException {F ile file = nEW File (ImagePath); BufferedImage image = Imageio.read (file), int width = image.getwidth (); int height = image.getheight (); BufferedImage grayimage = new BufferedImage (width, height, image.gettype ());//bufferedimage grayimage = new Bufferedimag E (width, height, bufferedimage.type_byte_gray); for (int i = 0; i < width; i++) {for (int j = 0; j < height; J + +) {I NT color = Image.getrgb (i, j); final int r = (color >>) & 0xff;final int g = (color >> 8) & 0xff;fin Al int b = color & 0xff;int gray=0;if (status==1) {Gray=getbigger (R, G, b);//Max-method grayscale}else if (status==2) {Gray=getsmall ( R, G, b);//Minimum method grayscale}else if (status==3) {Gray=getavg (R, G, b);//mean grayscale}else if (status==4) {gray = (int) (0.3 * r + 0.59 * g + 0.11 * b);//Weighted method grayscale}system.out.println ("pixel coordinates:" + "x=" + i + "y=" + j + "Grayscale value =" + Gray); Grayimage.setrgb (i, J, ColorTo RGB (0, Gray, Gray, Gray));}} File NewFile = new file (Outpath); Imageio.write (grayimage, "JPG", newFile);} Compares the size of a three number public static int Getbigger (int x,intY,int z) {if (x>=y&&x>=z) {return x;} else if (y>=x&&y>=z) {return y;} else if (z>=x&&z>=y) {return z;} Else{return 0;}} Compare three is the size of the smallest public static int getsmall (int x,int y,int z) {if (x<=y&&x<=z) {return x;} else if (y>=x&&y>=z) {return y;} else if (z>=x&&z>=y) {return z;} Else{return 0;}} The mean method public static int getavg (int x,int y,int z) {int avg= (X+Y+Z)/3;return avg;}}
Grayscale processing method of Java picture