Ler imagens

16 respostas
jessetsilva

alguem sabe uma maneira pratica de ler imagens tipo BMP sem usar nenhuma solução do jáva tipo JAI ou coisas assim?

16 Respostas

ViniGodoy
BufferedImage suaImagem = ImageIO.read(getClass().getResource("imagens/seuBmp.bmp"));

Isso vai estar num try, que terá alguns catchs. Para mais informações:
http://java.sun.com/docs/books/tutorial/2d/images/loadimage.html

Linkel

E aí, fera!
Maninho, você quer apenas ler e armazenar numa BufferedImage, como o mestre ViniGodoy indicou, ou você precisa também visualizá-la? Parece meio óbvia a pergunta, mas tenho que perguntar, já que você não mencionou. E se precisar visualizar, qual tipo de interface você está usando?
É só dizer o que mais quer fazer que a gente dá uma forcinha, rsrsrsrs…
Um abraço!

jessetsilva

ah sim, detalhe que esqueci hehe

quero ler esta imagem para capturar suas infomrações de RGB e depois criar um Histograma dela, trabaçho da faculdade

Obrigado a todos pela ajuda :slight_smile:

Linkel

Dá-lhe, fera!
Cara, capturar as informações RGB é facil, é só usar Raster para varrer a imagem pixel a pixel registrando as cores Red Green e Blue em vetores para cada uma… Recentemente tive que modificar determinadas ocorrências de cores e foi assim que eu varri a imagem para saber onde estavam as cores a serem modificadas; funcionará perfeitamente para você… É isso mesmo que precisa (armazenar os códigos RGB da imagem pixel a pixel)?

jessetsilva

isso mesmo :slight_smile:

mto obrigado, só espero agora ue o professor aceite esta maneira, hehe

Valeu a todos!

P

uma resposta assim talvez seja melhor

try

{

JFileChooser busca_foto = new JFileChooser();

busca_foto.setCurrentDirectory(new File("/Zeus/imagens/"));

busca_foto.setDialogTitle(Carregar imagem da Cidade);

busca_foto.showOpenDialog(this);

String foto = “”+busca_foto.getSelectedFile().getName();

tf_foto.setText(foto);

lbl_imagem.setIcon(new ImageIcon("/Zeus/imagens/"+tf_foto.getText()));

}

catch(Exception erro)

{

JOptionPane.showMessageDialog(null,Nao foi possível carregar a foto.);
a linha abaixo vai no seu resultset

lbl_imagem.setIcon(new ImageIcon("/Zeus/imagens/"+tf_foto.getText()));

}
P

esta ultima linha serve para o a imgem ser atualizada toda vez que mudar de registro

ViniGodoy

Melhor ainda se a resposta for formatada seguindo essas dicas:
http://www.guj.com.br/posts/list/50115.java

:wink:

Aí vai dar para a gente ler.

Linkel
jessetsilva:
isso mesmo :) mto obrigado, só espero agora ue o professor aceite esta maneira, hehe
Brother, se você fizer direitinho não vai ter como ele não aceitar, rsrsrssrs... Para te ajudar, vai aí um exemplo de como fazer o que eu falei...
BufferedImage imagem;
Raster raster; // se precisar alterar os pixels ao invés de só captura-los,
                     // use WritableRaster no lugar de Raster...
try {
    imagem = ImageIO.read(new File("imagens/seuBmp.bmp"));
}
catch (IOException ex) {
    ex.printStackTrace(); // claro que você pode fazer um tratamento de erros menos sujo, rsrsr
}

raster = imagem.getRaster();
int cores[] = new int[255];
// esse vetor "cores[]" vai armazenar as cores RGB
// [0] será Red(R), [1] será Green(G) e [2] será Blue(B)

for (int x = 0; x < imagem.getWidth(); x++) {
    for (int y = 0; y < imagem.getHeight(); y++) {
        raster.getPixel(x, y, cores); // captura da combinação de cor do pixel
        System.out.println("R("+cores[0]+") G("+cores[1]+") B("+cores[2]+")");
        // essa saída é só pra você testar e ver que dá certo, rsrrs
        // lembrando que isso vai fazer o processo ficar bem mais lento
    }
}
// esses laços varrem todo o objeto "imagem", 
// saindo do eixo 0,0 até o último pixel da mesma
Aí você faz o que quiser com os pixels, brother, rsrsrsrsrs... Deu até vontade de fazer um histograma também, se eu tivesse um tempinho, rsrsrs... Testa aí e me diz se te ajuda... Um abração!
Linkel

Ahhh, esqueci de lhe falar…
Se você usar “getClass().getResource(“imagens/seuBmp.bmp”)” ao invés de “new File(“imagens/seuBmp.bmp”)”, as imagens deverão estar no diretório de sua aplicação com definição no classpath… Caso queira implementar um JFileChooser para possibilitar ao usuário a seleção de qualquer imagem em qualquer diretório use new File
Um abraço!

Linkel

parcon:
uma resposta assim talvez seja melhor

try

{

JFileChooser busca_foto = new JFileChooser();

busca_foto.setCurrentDirectory(new File("/Zeus/imagens/"));

busca_foto.setDialogTitle(Carregar imagem da Cidade);

busca_foto.showOpenDialog(this);

String foto = “”+busca_foto.getSelectedFile().getName();

tf_foto.setText(foto);

lbl_imagem.setIcon(new ImageIcon("/Zeus/imagens/"+tf_foto.getText()));

}

catch(Exception erro)

{

JOptionPane.showMessageDialog(null,Nao foi possível carregar a foto.);
a linha abaixo vai no seu resultset

lbl_imagem.setIcon(new ImageIcon("/Zeus/imagens/"+tf_foto.getText()));

}</blockquote>

Parece que isso não responde o tópico Esse código implementa a visualização de uma imagem em um jLabel, mas a intenção é mais complexa pois se trata de analisar a imagem e traçar propriedades de cores com o histograma, como o amigo  disse

Um abraço!
jessetsilva

vou experimentar e depois doum um retorno. Obrigado mais uma vez a todos pela ajuda!

rodrigo.bossini

Queria aproveitar esse tópico pra pedir uma forcinha tbm :).

Primeiro, uma dúvida com o seguinte código:

BufferedImage imagem;  
Raster raster; // se precisar alterar os pixels ao invés de só captura-los,  
                     // use WritableRaster no lugar de Raster...  
try {  
    imagem = ImageIO.read(new File("imagens/seuBmp.bmp"));  
}  
catch (IOException ex) {  
    ex.printStackTrace(); // claro que você pode fazer um tratamento de erros menos sujo, rsrsr  
}  
  
raster = imagem.getRaster();  
int cores[] = new int[255];  
// esse vetor "cores[]" vai armazenar as cores RGB  
// [0] será Red(R), [1] será Green(G) e [2] será Blue(B)  
  
for (int x = 0; x < imagem.getWidth(); x++) {  
    for (int y = 0; y < imagem.getHeight(); y++) {  
        raster.getPixel(x, y, cores); // captura da combinação de cor do pixel  
        System.out.println("R("+cores[0]+") G("+cores[1]+") B("+cores[2]+")");  
        // essa saída é só pra você testar e ver que dá certo, rsrrs  
        // lembrando que isso vai fazer o processo ficar bem mais lento  
    }  
}  
// esses laços varrem todo o objeto "imagem",   
// saindo do eixo 0,0 até o último pixel da mesma

Esse vetor de 255 posições poderia ter apenas 3 posições, ou estou enganado?

Agora, queria pedir ajuda no seguinte:

Preciso ler uma imagem que já está em “grayscale”, pixel por pixel, e armezenar o número que representa cada pixel numa matriz…alguém me dá uma luz?

Linkel

rod.attack:
Queria aproveitar esse tópico pra pedir uma forcinha tbm :).

Primeiro, uma dúvida com o seguinte código:

BufferedImage imagem;  
Raster raster; // se precisar alterar os pixels ao invés de só captura-los,  
                     // use WritableRaster no lugar de Raster...  
try {  
    imagem = ImageIO.read(new File("imagens/seuBmp.bmp"));  
}  
catch (IOException ex) {  
    ex.printStackTrace(); // claro que você pode fazer um tratamento de erros menos sujo, rsrsr  
}  
  
raster = imagem.getRaster();  
int cores[] = new int[255];  
// esse vetor "cores[]" vai armazenar as cores RGB  
// [0] será Red(R), [1] será Green(G) e [2] será Blue(B)  
  
for (int x = 0; x < imagem.getWidth(); x++) {  
    for (int y = 0; y < imagem.getHeight(); y++) {  
        raster.getPixel(x, y, cores); // captura da combinação de cor do pixel  
        System.out.println("R("+cores[0]+") G("+cores[1]+") B("+cores[2]+")");  
        // essa saída é só pra você testar e ver que dá certo, rsrrs  
        // lembrando que isso vai fazer o processo ficar bem mais lento  
    }  
}  
// esses laços varrem todo o objeto "imagem",   
// saindo do eixo 0,0 até o último pixel da mesma

Esse vetor de 255 posições poderia ter apenas 3 posições, ou estou enganado?

Agora, queria pedir ajuda no seguinte:

Preciso ler uma imagem que já está em “grayscale”, pixel por pixel, e armezenar o número que representa cada pixel numa matriz…alguém me dá uma luz?

Brother,
Respondendo sua primeira pergunta, eu tb achei que 3 posições bastariam, já que só extraio 3 posições do vetor, porém, quando defino apenas as 3 posições então tenho um erro quanto à quantidade insuficiente de posições do vetor… Tentei outros valores mais próximos a 3 e dependendo da imagem dava certo e outras não… Não fiz um teste, mas imaginei então que esse vetor deve guardar outras informações em outras posições e resolvi usar um valor alto e simbólico, para ter certeza que nunca falharia, e por isso usei 255… Se alguém souber explicar direitinho isso, seria legal…

Agora, não entendi o sou problema.
1 - Você quer fazer a mesma leitura RGB da imagem, só que ela estando em escala de cinza?
2 - Voce quer criar uma matriz para saber quantas linhas e colunas se obtem de uma dada imagem em escala de cinza?
3 - Ou o que?

Estamos ai…

rodrigo.bossini

Então, é o seguinte:

Eu preciso de um jeito de percorrer uma imagem que já está em grayscale pixel por pixel. Na verdade, preciso ser capaz de armazenar numa matriz ou vetor o número inteiro que representa o tom de cinza de cada pixel…como a imagem está em grayscale, preciso que cada pixel seja representado por um valor entre 0 e 255.
Esse é um software que lê um radiografia e dependendo do range em que estiver o tom de cinza do pixel, ele indica que ali há uma probabilidade maior de se ter um tumor…

rodrigo.bossini

Editando:

Ops, a net caiu e acabei mandando a mesma mensagem duas vezes :slight_smile:

Criado 25 de agosto de 2008
Ultima resposta 16 de fev. de 2009
Respostas 16
Participantes 5