Java DIP - Conversión de escala de grises
Para convertir una imagen en color a una imagen en escala de grises, debe leer los píxeles o los datos de la imagen utilizando File y ImageIO objetos y almacenar la imagen en BufferedImageobjeto. Su sintaxis se da a continuación:
File input = new File("digital_image_processing.jpg");
BufferedImage image = ImageIO.read(input);
Además, obtenga el valor del píxel usando el método getRGB()y realice el método GrayScale () en él. El método getRGB () toma el índice de fila y columna como parámetro.
Color c = new Color(image.getRGB(j, i));
int red = (c.getRed() * 0.299);
int green =(c.getGreen() * 0.587);
int blue = (c.getBlue() *0.114);
Aparte de estos tres métodos, hay otros métodos disponibles en la clase Color como se describe brevemente:
No Señor. | Método y descripción |
---|---|
1 | brighter() Crea un nuevo color que es una versión más brillante de este color. |
2 | darker() Crea un nuevo color que es una versión más oscura de este color. |
3 | getAlpha() Devuelve el componente alfa en el rango 0-255. |
4 | getHSBColor(float h, float s, float b) Crea un objeto Color basado en los valores especificados para el modelo de color HSB. |
5 | HSBtoRGB(float hue, float saturation, float brightness) Convierte los componentes de un color, según lo especificado por el modelo HSB, en un conjunto equivalente de valores para el modelo RGB predeterminado. |
6 | toString() Devuelve una representación de cadena de este color. |
El último paso es sumar estos tres valores y volver a establecerlo en el valor de píxel correspondiente. Su sintaxis se da a continuación:
int sum = red+green+blue;
Color newColor = new Color(sum,sum,sum);
image.setRGB(j,i,newColor.getRGB());
Ejemplo
El siguiente ejemplo demuestra el uso de la clase Java BufferedImage que convierte una imagen a escala de grises:
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
public class GrayScale {
BufferedImage image;
int width;
int height;
public GrayScale() {
try {
File input = new File("digital_image_processing.jpg");
image = ImageIO.read(input);
width = image.getWidth();
height = image.getHeight();
for(int i=0; i<height; i++) {
for(int j=0; j<width; j++) {
Color c = new Color(image.getRGB(j, i));
int red = (int)(c.getRed() * 0.299);
int green = (int)(c.getGreen() * 0.587);
int blue = (int)(c.getBlue() *0.114);
Color newColor = new Color(red+green+blue,
red+green+blue,red+green+blue);
image.setRGB(j,i,newColor.getRGB());
}
}
File ouptut = new File("grayscale.jpg");
ImageIO.write(image, "jpg", ouptut);
} catch (Exception e) {}
}
static public void main(String args[]) throws Exception {
GrayScale obj = new GrayScale();
}
}
Salida
Cuando ejecuta el ejemplo dado, convierte la imagen digital_image_processing.jpg a su imagen en escala de grises equivalente y escríbala en el disco duro con el nombre grayscale.jpg.