1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Binarização de Imagens em Java

Oi, boa tarde, estou tentando fazer a binarização de uma imagem, só que da erro, fala que não é possível ler o arquivo de entrada, alguém pode me ajudar, vou passar o código.

A minha imagem esta na pasta binarização.

Main

package binarizacao;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;


/**
 *
 * @author Cesar Beletatti
 */
public class BinarizacaoDeImagem {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {

        Imagem obj = new Imagem("binarizacao/onepunch.jpg");
        obj.binarizarImagem(100);
        BufferedImage img = obj.imprimirImagem();
        ImageIO.write(img, "jpg", new File("binarizacao/saida.jpg"));

    }

}

Classe Imagem

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package binarizacao;

import java.util.logging.Logger;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import javax.imageio.ImageIO;

/**
 *
 * @author Cesar Beletatti
 */
public class Imagem {

    public static final int larguraPermitida = 1024;
    public static final int alturaPermitida = 720;

    private Color matrizCor[][];
    private int largura;
    private int altura;

    public Imagem(String arquivo){
        matrizCor = new Color[larguraPermitida][alturaPermitida];
        carregarImagem(arquivo);
    }
    public void carregarImagem(String arquivo){
        BufferedImage bf = null;
        try {
            bf = ImageIO.read(new File(arquivo));
        } catch (IOException ex){
            Logger.getLogger (Imagem.class.getName()).log(Level.SEVERE, null, ex);
        }
        if(bf.getWidth() < larguraPermitida){
            largura = bf.getWidth();
        }else{
            largura = largura;
        }
        if(bf.getHeight() < alturaPermitida){
            altura = bf.getHeight();
        }else{
            altura = alturaPermitida;
        }
        int cont = 0;
        for (int i = 0; i < altura; i++) {
            for (int j = 0; j < largura; j++) {
                cont++;
                matrizCor[i][j] = new Color(bf.getRGB(j, i));
                System.out.println(cont + "RGB:" + bf.getRGB(j, i));
            }
        }
    }

    public BufferedImage redimensionar(String arquivo, double porcentagem){

        BufferedImage bf = null;
        try{
            bf = ImageIO.read(new File(arquivo));
        } catch(IOException ex){
            Logger.getLogger(Imagem.class.getName()).log(Level.SEVERE, null, ex);
        }
        int largura = bf.getWidth();
        int altura = bf.getHeight();
        int escalaLargura = (int) (porcentagem* largura);
        int escalaAltura = (int) (porcentagem* altura);

        BufferedImage buff = new BufferedImage(escalaLargura, escalaAltura, bf.getType());
        Graphics2D g = buff.createGraphics();
        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        g.drawImage(bf, 0, 0, escalaLargura, escalaAltura, 0, 0, largura, altura, null);
        g.dispose();
        return buff;
    }

    public void binarizarImagem(double valor){
        for (int i = 0; i < altura; i++) {
            for (int j = 0; j < largura; j++) {
                Color pixel = matrizCor[i][j];
                int media = (pixel.getBlue() + pixel.getRed() + pixel.getGreen()) / 3;
                if(media < valor){
                    matrizCor[i][j] = Color.BLACK;
                }else{
                    matrizCor[i][j] = Color.WHITE;
                }
            }
        }
    }

    public BufferedImage imprimirImagem(){
        BufferedImage saida = new BufferedImage(largura, altura, BufferedImage.TYPE_INT_RGB);
        for (int i = 0; i < altura; i++) {
            for (int j = 0; j < largura; j++) {
                saida.setRGB(j, i, matrizCor[i][j].getRGB());
            }
        }
        return saida;
    }

}

e da esse erro:

mar 12, 2018 9:07:27 PM binarizacao.Imagem carregarImagem
GRAVE: null
javax.imageio.IIOException: Can't read input file!
    at javax.imageio.ImageIO.read(ImageIO.java:1301)
    at binarizacao.Imagem.carregarImagem(Imagem.java:38)
    at binarizacao.Imagem.<init>(Imagem.java:33)
    at binarizacao.BinarizacaoDeImagem.main(BinarizacaoDeImagem.java:24)

Exception in thread "main" java.lang.NullPointerException
    at binarizacao.Imagem.carregarImagem(Imagem.java:42)
    at binarizacao.Imagem.<init>(Imagem.java:33)
    at binarizacao.BinarizacaoDeImagem.main(BinarizacaoDeImagem.java:24)
C:\Users\Cesar Beletatti\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
FALHA NA CONSTRUÇÃO (tempo total: 0 segundos)

E uma duvida, eu preciso ter o arquivo saida.jpg, ou cria sozinho, agradeço desde ja.

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java netbeans ou faça a sua própria pergunta.