Ajuda para manipulação de pixels em imagem

10 respostas
alineea

Boa noite à todos.

Estou fazendo um trabalho sobre Processamento de Imagens e preciso juntamente com meu colega de dupla tentar criar um programa que aplique filtros na imagem, faça equalização de histograma e por aí.
Para aplicar os filtros, tenho que transformar a imagem numa matriz de pixels. Depois, de acordo com o filtro, eu vou percorrer cada pixel da imagem e modifico o valor deste pixel de acordo com o valor dos seus pixels vizinhos combinado com os valores de matriz responsável pelo filtro (máscara).

Principalmente nos filtros, para que esse processamento seja possível eu preciso percorrer os pixels da imagem.
Eu peço ajuda pra que possam me indicar alguma classe, ou trecho de código, que me ajude a ler a imagem e jogar seus pixels numa matriz. Ou seja, eu crio uma matriz com o mesmo tamanho da imagem e o valor do pixel P(x, y) da imagem é escrito na posição M[x, y] da matriz. Assim, eu aplico o filtro nos pixels da matriz, seus valores serão mudados e pinto os valores de pixels novos na tela para o usuário, como resultado do filtro…

Eu procurei material do google, achei algumas coisas mas não é o que eu preciso… Eu peço ajuda de vocês.
Desde já agradeço muito :slight_smile:

10 Respostas

davidbuzatto

Olá!

Escrevi uma classe bem simples que carrega uma imagem que está no mesmo diretório do .class e pegando cada pixel mostra os componentes R, G e B.

import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;

public class CarregaImagem {

    public static void main( String[] args ) {
    	
    	new CarregaImagem().carregar();
    	
    }
    
    public void carregar() {
    	
    	try {
    		
    		BufferedImage bufi = ImageIO.read( getClass().getResourceAsStream( "imagem.bmp" ) );
    		
    		Color c = null;
    		
    		for ( int i = 0; i < bufi.getHeight(); i++ ) {
    			for ( int j = 0; j < bufi.getWidth(); j++ ) {
    				c = new Color( bufi.getRGB( i, j ) );
    				System.out.print( c + " " );
    			}
    			System.out.println();
    		}
    		
    	} catch ( IOException exc ) {
    		
    		exc.printStackTrace();
    		
    	}
    	
    }
        
}

Dê uma olhada nos pacotes java.awt, java.awt.image (+subpacotes) e javax.imageio (+subpacotes) que você vai encontrar tudo que você precisa. Dê uma olhada na documentação para ver o modo que é obtido o pixel usando o getRGB que usei. No caso é usando o modo TYPE_INT_ARGB.

Vc pode criar uma matriz de Colors, usando como esqueleto o método carregar...

Dê uma melhorada no código...

Abraço!

alineea

Puxa, valeu :smiley:
Já tá ótimo , nossa , e felizmente vouprecisar trabalhar apenas com imagens em tons de cinza; já estou achando como se faz p/ mandar os RGBs para grayscale. Obrigada também pelas classes; eu vou “futricar” nelas :slight_smile:
P/ o pessoal do fórum, quando o trabalho ficar pronto eu vou postá-lo aqui, p/ outras pessoas que precisarem de uma empurrada que nem eu precisei :slight_smile:
Valeu, david :slight_smile: Falo, galera :slight_smile:

davidbuzatto

De nada :smiley:

Se suas imagens já são salvas em escalas de cinza, não tem problema, usa da mesma forma. Caso contrário é só mudar o modo das cores para TYPE_BYTE_GRAY.

Abraço!

alineea

oi gente!! =)
espero q estejam tds bem, trabalhando mt, estudando mt, enfim… tudo o que é bom custa muito esforço mas vale muito a pena!
Vou postar finalmente depois de quase um ano o código-fonte do trabalho de imagens… eu estava mexendo nele mas não estou tendo tempo mais… então, como é uma coisa que pedem bastante, tô postando… ajudou muito quando precisei e espero ajudar tambem a outras pessoas <=) isso sem contar os verdadeiros milagres <3<3<3<3<3<3<3 que este trabalho trouxe a minha vida…
enfim, está aí… qualquer duvida me avisem ou postem no forum ,q tem mta gente legal aqui pra dar uma mão…
beijos grandes, fiquem todos bem*
até mais!! =)

"ACREDITAR SEMPRE E DESISTIR JAMAIS! VIDA E VITÓRIA POSSUEM O MESMO SIGNIFICADO!" =DDDDDDD

E

Oi alineea,
Será que você poderia me dar uma explicação mais detalhada do seu programa?

Eu estou precisando pegar uma imagem, ler ela, e mostrar a posição e os valores dos pixels.

Obrigada desde já!

T

Estou fazendo o mesmo trabalho, mas queria fazer em C, apodem me ajudar?!

J

Existe uma biblioteca chamada opencv para linguagem c e também c++. É desenvolvida pela intel e é usada em sistema de tempo real. É muito otimizada mesmo.

http://opencv.willowgarage.com/wiki/

Caso queira praticar peocessamento de imagens aconselho usar o framework qt para c++. O set de classes para processamento de imagens é muito bom e simples de utilizar, além de ser muito rápido e exigir um runtime leve(poucas bibliotecas carregadas na memória ram). Existem versões para msc++ ,mingw e set de compiladores gnu em linux.

http://qt.nokia.com/

O método scanline da classe Qimage: uchar* QImage::scanline(int i) volta um apontador para a linha i da imagem. Você pode percorrer a linha processando seus pixel.

yasminemalafaia

Estou fazendo um trabalho, que creio que eu tenha que percorrer cada pixel da imagem e transformá-lo em uma outra imagem de tamanho maior. No caso fazer um foto mosaico.

Pelo que olhei talvez seu trabalho me ajude um pouco, gostaria de saber como acessar cada pixel da imagem e substituir…tb usarei imagens em tom de cinza

Obrigada!!

ViniGodoy

yasminemalafaia:
Estou fazendo um trabalho, que creio que eu tenha que percorrer cada pixel da imagem e transformá-lo em uma outra imagem de tamanho maior. No caso fazer um foto mosaico.

Pelo que olhei talvez seu trabalho me ajude um pouco, gostaria de saber como acessar cada pixel da imagem e substituir…tb usarei imagens em tom de cinza

Obrigada!!

Exatamente como já está postado no exemplo desse tópico que você ressuscitou!
Veja o post do DavidBuzatto!

yasminemalafaia

teria como me indicar algum artigo que explique melhor? pois não acho nada sobre mosaicos com a linguagem Java

Obrigada

Criado 22 de outubro de 2007
Ultima resposta 19 de jan. de 2013
Respostas 10
Participantes 7