Analisar cor pixel a pixel de uma imagem?  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
alexcostars
JavaTeenager
[Avatar]
Membro desde: 10/01/2009 13:08:13
Mensagens: 183
Localização: Rio Grande do Sul
Offline

Pessoal, será que existe alguma classe Java (mesmo que seja de terceiros (externa)) que verifique mudanças drásticas em imagens? Vou explicar melhor:

Queria desenvolver um aplicativo que comparasse imagens e que se as duas imagens comparadas fossem diferentes ele daria um sinal. Resolvi usar a classe Robot que já vem com o Java para analisar pixel a pixel (nela tem um método que verifica a cor do pixel). O problema é que esse método no Robot analisa o pixel do monitor e não de uma imagem, e como eu gostaria de analisar as imagens sem que o usuário precisa-se ver-las, não funcionaria. Caso alguém saiba como analisar o pixel de uma imagem, será que poderia me dizer?

Acredito que não exista mesmo, mas não custa tentar perguntar, já vi tanta coisa no Java que não duvido de mais nada

Muito Obrigado

alexcostars
JavaTeenager
[Avatar]
Membro desde: 10/01/2009 13:08:13
Mensagens: 183
Localização: Rio Grande do Sul
Offline

alexcostars wrote:Pessoal, será que existe alguma classe Java (mesmo que seja de terceiros (externa)) que verifique mudanças drásticas em imagens? Vou explicar melhor:

Queria desenvolver um aplicativo que comparasse imagens e que se as duas imagens comparadas fossem diferentes ele daria um sinal. Resolvi usar a classe Robot que já vem com o Java para analisar pixel a pixel (nela tem um método que verifica a cor do pixel). O problema é que esse método no Robot analisa o pixel do monitor e não de uma imagem, e como eu gostaria de analisar as imagens sem que o usuário precisa-se ver-las, não funcionaria. Caso alguém saiba como analisar o pixel de uma imagem, será que poderia me dizer?

Acredito que não exista mesmo, mas não custa tentar perguntar, já vi tanta coisa no Java que não duvido de mais nada

Muito Obrigado



Galera, como eu realmente não acredito que exista como, eu fiz pela classe Robot mesmo. Para que eu possa analisar eu preciso colocar a imagem na tela (eu coloco ela como um ícone de Label), o problema é que eu não sei em que posição X-Y da tela o componente está. Será que existe alguma maneira que eu possa descobrir em qual X e Y (em pixels) os componentes de meu jFrame começam?

vlw

thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Você pode pegar ambas as imagens e efetuar uma operação aritmética sobre elas (tipicamente XOR). Se algo aparecer que for diferente de 0, então é um pixel diferente.

Rode o programa Java2Demo (que é um programa que está em <diretório do JDK>\demo\jfc\Java2D ) e veja o demo do tab Composite que se chama AC Rules. Há uma figura que é a XOR; quando você faz XOR de 2 figuras exatamente iguais, o resultado deve ser um bitmap preto. Se elas forem diferentes por um pixel (por exemplo), deve aparecer um pixel em uma cor diferente de preto.

Os fontes estão nesse mesmo diretório (Java2Demo.)
[WWW]
Marky.Vasconcelos
Moderador
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline

Voce tem que pegar o WritableRaster da Bufferedimage que quer analizar.

Facebook @MarkyHitchhiker +Mark WP: MarkyTech's

Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais

DefaultTableModel?! PARE! Não faça isso! Faça melhor!

Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

DON'T PANIC!
MarkyHitchhiker's Blog!
[WWW] [MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20576
Localização: Curitiba/PR
Offline

Usar Robot foi uma péssima idéia. O ideal é usar o Java2D para trabalhar com imagens, como o Mark falou, através da classe BufferedImage. Este tutorial explica como trabalhar com a classe:
http://java.sun.com/docs/books/tutorial/2d/images/index.html

E esses aqui falam mais sobre o uso de rasters, que permitem fazer o que você quer (analisar pixel-a-pixel):
http://javaboutique.internet.com/tutorials/rasters/
http://javaboutique.internet.com/tutorials/rasters2/


Agora, é sempre bom definir o que você entende por uma imagem "muito diferente" da outra. Pois, dependendo do que você queira analisar, esse pode ser um trabalho muito complexo ou muito simples.

This message was edited 1 time. Last update was at 17/08/2009 09:33:06


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
KWill
Virtual Machine Man
[Avatar]

Membro desde: 18/09/2006 10:05:46
Mensagens: 609
Offline

Minha sugestão: use a classe PixelGrabber ou esta classe aqui que é ainda melhor para ter uma representação da imagem ou parte de imagem como um vetor de inteiros, onde cada elemento desse vetor de inteiros representa exatamente 1 pixel dessa imagem ou subimagem. A partir dessas representações acho que dá para ir comparando as coisas.

Inté.

"Só estou certo de que não possuo outras certezas" - KWill
"Não penso, mas Googlo, logo existo!" - Geração Copy-Cola
alexcostars
JavaTeenager
[Avatar]
Membro desde: 10/01/2009 13:08:13
Mensagens: 183
Localização: Rio Grande do Sul
Offline


Rode o programa Java2Demo (que é um programa que está em <diretório do JDK>\demo\jfc\Java2D ) e veja o demo do tab Composite que se chama AC Rules. Há uma figura que é a XOR; quando você faz XOR de 2 figuras exatamente iguais, o resultado deve ser um bitmap preto. Se elas forem diferentes por um pixel (por exemplo), deve aparecer um pixel em uma cor diferente de preto.

Os fontes estão nesse mesmo diretório (Java2Demo.)


Bah kra, gostei disso que vc falou, entrei lá e rodei certinho, até achei o "ícone" lá, o problema é que não descobri onde escolher as imagens para dar uma testada (se é que tem como). Será que vc podia me passar uns links sobre esse XOR porque pesquisei no Google mas a maioria era outro assunto, os poucos que encontrei apenas falavam para que servia, mas nenhum ensinava a usar "via código".

Muito Obrigado!

 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team