Java DIP - Conversão GrayScale
Para converter uma imagem colorida em uma imagem em tons de cinza, você precisa ler os pixels ou dados da imagem usando File e ImageIO objetos e armazenar a imagem em BufferedImageobjeto. Sua sintaxe é fornecida abaixo -
File input = new File("digital_image_processing.jpg");
BufferedImage image = ImageIO.read(input);
Além disso, obtenha o valor do pixel usando o método getRGB()e execute o método GrayScale () nele. O método getRGB () leva o índice de linha e coluna 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);
Além desses três métodos, existem outros métodos disponíveis na classe Color, conforme descrito brevemente -
Sr. Não. | Método e Descrição |
---|---|
1 | brighter() Ele cria uma nova cor que é uma versão mais brilhante dessa cor. |
2 | darker() Isso cria uma nova cor que é uma versão mais escura dessa cor. |
3 | getAlpha() Ele retorna o componente alfa no intervalo 0-255. |
4 | getHSBColor(float h, float s, float b) Ele cria um objeto Color com base nos valores especificados para o modelo de cores HSB. |
5 | HSBtoRGB(float hue, float saturation, float brightness) Ele converte os componentes de uma cor, conforme especificado pelo modelo HSB, em um conjunto equivalente de valores para o modelo RGB padrão. |
6 | toString() Ele retorna uma representação de string desta cor. |
A última etapa é adicionar todos esses três valores e configurá-los novamente com o valor de pixel correspondente. Sua sintaxe é fornecida abaixo -
int sum = red+green+blue;
Color newColor = new Color(sum,sum,sum);
image.setRGB(j,i,newColor.getRGB());
Exemplo
O exemplo a seguir demonstra o uso da classe Java BufferedImage que converte uma imagem em tons de cinza -
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();
}
}
Resultado
Quando você executa o exemplo dado, ele converte a imagem digital_image_processing.jpg para sua imagem em tons de cinza equivalente e grave-a no disco rígido com o nome grayscale.jpg.