Mostrando postagens com marcador Processamento de Imagem. Mostrar todas as postagens
Mostrando postagens com marcador Processamento de Imagem. Mostrar todas as postagens

sábado, 10 de março de 2012

Processamento de imagem

   Algumas pessoas têm a vontade de saber como as imagens são representadas e como manipulá-las. Basicamente, uma imagem é uma matriz formada por pixels. Cada pixel é representado por um inteiro de 32 bit da seguinte maneira:


00000000 00000000 00000000 11111111
 
^ Alpha  ^Red     ^Green   ^Blue

      Os valores do alpha, red, green e blue são valores inteiros entre 0 e 255.

        O valor máximo para o elemento alfa significa que o pixel será totalmente opaco e o valor mínimo significa transparência total.
   
   Nesta postagem, vamos mostrar como fazer uma transformação simples chamada negativo. O objetivo desta transformação é “inverter” a valor de cada cor em cada pixel da imagem.

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class pdi {
 public static void main(String args[] ) throws IOException{
   BufferedImage imagem = null;
   imagem = ImageIO.read(
    new File("C:\\Users\\ufc\\workspace\\PDI\\src\\tux.png")
   );
  
   int w = imagem.getWidth();
   int h = imagem.getHeight();
   //retorna um vetor inteiro representando os pixels da imagem
   int pixels[] = imagem.getRGB(0, 0, w, h, null, 0, w);

   for (int col = 0; col < w; col++) {
     for (int lin = 0; lin < h; lin++) {
  //Pega a cor em cada pixel
  Color c = new Color(pixels[lin*w + col]);
  pixels[lin*w + col] = new 
  Color(255-c.getRed(),255-c.getBlue(),255-c.getGreen()).getRGB();
      }
 }
        //seta um vetor inteiro representando os pixels da imagem
 imagem.setRGB(0, 0, w, h, pixels, 0, w);
 ImageIO.write(imagem, "PNG", 
        new File("C:\\Users\\ufc\\workspace\\PDI\\src\\tux2.png"));
 }
}

Aplicamos este algoritmo na seguinte imagem:


A nova imagem gerada pelo algoritmo é essa aqui: