[RESOLVIDO] Processamento de imagem - Resultado parcial

5 respostas
Ziru

Boa tarde pessoal, venho lhes pedir humildemente vossa ajuda de novo.
Como não consegui de modo algum fazer a subtração de imagem, hora me retornava uma imagem preta hora somente com uma mascara vermelha. Bolei então meu próprio algorítimo, o qual me deu um resultado até bom, porem há algumas falhas que não entendo o porque ocorre, não consigo ver nada fora da lógica.

[img]http://img266.imageshack.us/img266/4965/c1d70d69e9d64cf5afbd9ac.png[/img]

Aqui está meu código fonte caso queiram analisar.

public static BufferedImage contarPixelsDif(BufferedImage imagem,
			BufferedImage imagem1) {

		Raster raster1 = imagem.getRaster();
		WritableRaster raster2 = imagem.getRaster();
		int[] pixel = new int[3];
		int increment = 0;
		ColorModel model = ColorModel.getRGBdefault();
		for (int h = 0; h < imagem.getHeight(); h++)
			for (int w = 0; w < imagem.getWidth(); w++) {

				int rgb = imagem.getRGB(w, h);
				int r = model.getRed(rgb);
				int g = model.getGreen(rgb);
				int b = model.getBlue(rgb);

				int rgb2 = imagem1.getRGB(w, h);
				int r2 = model.getRed(rgb);
				int g2 = model.getGreen(rgb);
				int b2 = model.getBlue(rgb);

				if (rgb != -13883097) {
					Wsub1 = w;
					Hsub1 = h;
				}

				if (rgb2 != -13883097) {
					Wsub2 = w;
					Hsub2 = h;
				}

				if (Wsub1 != Wsub2 && Hsub1 != Hsub2) {
					
					int cor = new Color(255, 000, 000).getRGB();
					imagem.setRGB(Wsub2, Hsub2, cor);
				}

			}
		
		return imagem;
	}

O código acima recebe duas imagens como parâmetro, varre as imagens por completo e pega as coordenadas dos pixels que forem diferentes da cor -13883097, e então nas coordenadas que forem diferentes muda esse pixel para a cor vermelha. Setando assim os novos pontos na imagem. O problema é que em alguns pontos não estão sendo pintados por completos, e não consigo encontrar o que possa estar ocasionando isso.
Toda ajuda é bem vinda, desde já agradeço vossa atenção.

5 Respostas

ViniGodoy
Como não? Usei exatamente o código que postei para você no outro post:
package demo;

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class ExemploSubtracao {
    public int subtract(int color1, int color2) {
        Color c1 = new Color(color1);
        Color c2 = new Color(color2);

        int r = Math.max(0, c1.getRed() - c2.getRed());
        int g = Math.max(0, c1.getGreen() - c2.getGreen());
        int b = Math.max(0, c1.getBlue() - c2.getBlue());
        return new Color(r, g, b).getRGB();
    }

    public BufferedImage subtract(BufferedImage img1, BufferedImage img2) {
        BufferedImage out = new BufferedImage(img1.getWidth(), img1.getHeight(), BufferedImage.TYPE_INT_RGB);

        for (int y = 0; y &lt; img1.getHeight(); y++)
            for (int x = 0; x &lt; img1.getWidth(); x++)
                out.setRGB(x, y, subtract(img1.getRGB(x, y), img2.getRGB(x, y)));

        return out;
    }

    void doIt() throws IOException {
        BufferedImage img1 = ImageIO.read(getClass().getResource(&quot;/demo/imagens/img1.png&quot;));
        BufferedImage img2 = ImageIO.read(getClass().getResource(&quot;/demo/imagens/img2.png&quot;));
        // Filtra o que existe na imagem2 mas não na imagem1.
        ImageIO.write(subtract(img2, img1), &quot;png&quot;, new File(&quot;c:/temp/out.png&quot;));
    }

    public static void main(String[] args) throws Exception {
        new ExemploSubtracao().doIt();
    }
}

E obtive o seguinte resultado:





Ziru

ViniGodoy eu juro pelo HD do meu note com todos os codigos fontes dos meus projetos. Não tava dando certo, tentei arrumar mas como não entendo do assunto não deu em nada, procurei outros codigos para subtração e também não tava virando.
Mas agora deu certo, GRAÇAS A VC, sou muito grato mesmo cara de coração.

Resultado final ficou exatamente como eu queria.

Valeu mesmo a força parecero. :smiley:

J

Ziru:
ViniGodoy eu juro pelo HD do meu note com todos os codigos fontes dos meus projetos. Não tava dando certo, tentei arrumar mas como não entendo do assunto não deu em nada, procurei outros codigos para subtração e também não tava virando.
Mas agora deu certo, GRAÇAS A VC, sou muito grato mesmo cara de coração.

Resultado final ficou exatamente como eu queria.

Valeu mesmo a força parecero. :smiley:

Troll idiota. Ao invés de ficar se vangloriando pelo trabalho que as pessoas aqui FIZERAM para você coloque o código completo da solução para que outras pessoas resolver as dúvidas delas também.
Duas palavras te resumem bem. DESONESTO e PREGUIÇOSO.

Ziru

Eu gostaria muito que me respeitasse, assim como te respeito. Preguiço e desonesto? Vou anotar essas minha novas qualidades…
Se vc tiver a descencia de ler, verás agradeço muito pelo codigo limpo ao qual o ViniGodoy me passou, ao contrario de você que me passou um fonte que nem o Eisten consegue ler, quanto mais eu que nunca tinha lido sobre o assunto. Desde o começo tens me “ajudado” com desdem, e não se deu ao luxo de responder nenhuma das minhas perguntas. Horas se não queres ajudar não começa, pois se começa e larga pela metade é ainda pior…
Vamos ao preguiçoso, se LER acima tem um codigo que EU tentei fazer para arranjar MEU problema. O qual gerou uma segunda imagem mas com defeitos…
o codigo que o ViniGodoy me passou faz SOMENTE a subtração da imagem, passar 12h em frente ao not tentando estabelecer um padrão RGB fui eu quem passsou, desenvolver o algorítimo pra mudar os pixels para vermelho FUI EU quem fez.
Eu sou sim MUITO GRATO MESMO AO ViniGodoy que me ajudou o tempo todo de boa vontade, me indicando conteudos e me mostrando exemplos, ao contrario de você meu amigo que faz questão de me atacar o tempo todo. A resolução desse aqui é o codigo que o ViniGodoy passou e ponto. Sem mais delongas eu só pesso que me respeito.
E mais uma vez muito obrigado ViniGodoy sem a sua ajuda eu não teria conseguido fazer da forma certa, ao menos não agora que ainda sei muito pouco do assunto processamento de imagem, um abraço e se um dia eu puder ajuda-lo em algo farei da mesma boa vontade com a qual fizeste a mim. :smiley:

ViniGodoy

Vou trancar o tópico antes que isso vire uma série de ofensas pessoais para todos os lados.

Criado 22 de janeiro de 2013
Ultima resposta 23 de jan. de 2013
Respostas 5
Participantes 3