Pregunta

Así que estaba tratando de aplicar un filtro gaussiano a una imagen que tengo usando Java. Sin embargo, la imagen no está siendo efectuada por el filtro. Estoy usando el operador de convolución incorporado. ¿Podría alguien que me indique lo que está pasando mal?

public static void main(String[] args) {
  File img = new File( "C:\\Users\\Aditya\\Pictures\\20130729_140153.jpg" );
  BufferedImage a = null;
  try{ 
      a= ImageIO.read( img );
  }
  catch( Exception e ){
      System.out.print( e.toString() );
      return;
  }
  BufferedImage a9 = new BufferedImage( a.getWidth() , a.getHeight() , a.getType() ); 
  float[] matrix = {
    1f/273,4f/273,7f/273,4f/273,1f/273,
    4f/273,16f/273,26f/273,16f/273,4f/273,
    7f/273,26f/273,41f/273,26f/273,7f/273,
    4f/273,16f/273,26f/273,16f/273,4f/273,
    1f/273,4f/273,7f/273,4f/273,1f/273
    };
    BufferedImageOp op = new ConvolveOp( new Kernel( 5, 5, matrix ) );
    a9 = op.filter( a, a9 );
    try{
        ImageIO.write( a9 , "jpg" ,new File( "C:\\Users\\Aditya\\Pictures\\jim.jpg" ));
    }catch( Exception e ){
        System.out.println( e );
    }
    }
}

Al no trabajar, quiero decir que no hay diferencia en las imágenes de A y A9 en absoluto. ¡Es como si hubieran sido copiados!

¿Fue útil?

Solución

No hay nada de malo en su código, lo ejecuté y veo un ligero desenfoque en la imagen de salida. Si desea ver un efecto más pronunciado, cámbielo a un núcleo de detección de borde, por ejemplo, utilizando

    float[] matrix = {
             1,  0, -1,
             0,  0,  0,
            -1,  0,  1
    };
    BufferedImageOp op = new ConvolveOp(new Kernel(3, 3, matrix));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top