Ajuda para manipulação de pixels em imagem

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:

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.

[code]
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();
		
	}
	
}

}[/code]

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!

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:

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!

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

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á!

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

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.

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!!

[quote=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!![/quote]

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

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

Obrigada