¿Cuál es la mejor biblioteca / enfoque de procesamiento de imágenes de Java?

Estoy usando tanto las aplicaciones apis de JAI como ImageMagick?

ImageMagick tiene algunos problemas de escalabilidad y JMagick basado en JNI tampoco es atractivo. JAI tiene resultados de mala calidad al hacer operaciones de cambio de tamaño en comparación con ImageMagick.

¿Alguien sabe de alguna herramienta excelente, ya sea de código abierto o comercial, que sea nativa de Java y entregue resultados de alta calidad?

Hay ImageJ , que se jacta de ser el

el progtwig de procesamiento de imágenes Java puro más rápido del mundo

Se puede usar como una biblioteca en otra aplicación. Su architecture no es shiny, pero tiene tareas básicas de procesamiento de imágenes.

Sé que esta pregunta es bastante antigua, pero a medida que sale el nuevo software, ayuda a obtener algunos enlaces nuevos a proyectos que pueden ser interesantes para la gente.

imgscalr es una biblioteca de tamaño de Java puro (y operaciones simples como relleno, recorte, rotación, brillo / atenuación, etc.) que es dolorosamente simple de usar: una sola clase consiste en un conjunto de operaciones gráficas simples, todas definidas como métodos estáticos que pasas una imagen y obtienes un resultado.

El ejemplo más básico del uso de la biblioteca sería este:

 BufferedImage thumbnail = Scalr.resize(image, 150); 

Y un uso más típico para generar miniaturas de imágenes usando algunos ajustes de calidad y similares podría verse así:

 import static org.imgscalr.Scalr.*; public static BufferedImage createThumbnail(BufferedImage img) { // Create quickly, then smooth and brighten it. img = resize(img, Method.SPEED, 125, OP_ANTIALIAS, OP_BRIGHTER); // Let's add a little border before we return result. return pad(img, 4); } 

Todas las operaciones de procesamiento de imágenes utilizan la canalización raw Java2D (que es acelerada por hardware en las principales plataformas) y no introducirán el dolor de llamar a través de JNI como contención de biblioteca en su código.

imgscalr también se ha implementado en producciones a gran escala en bastantes lugares : la inclusión de la clase AsyncScalr lo convierte en un complemento perfecto para cualquier procesamiento de imagen del lado del servidor.

Existen numerosos ajustes a la calidad de imagen que puede utilizar para intercambiar entre velocidad y calidad con el modo ULTRA_QUALITY más alto que proporciona un resultado escalado que se ve mejor que la implementación Lancoz3 de GIMP.

Otra buena alternativa: Marvin

No soy Java, pero OpenCV es ideal para mis necesidades. No estoy seguro de si le queda bien. Aquí hay un puerto de Java, creo: http://docs.opencv.org/2.4/doc/tutorials/introduction/desktop_java/java_dev_intro.html

El procesamiento es nuevo pero muy, muy bueno.

Intenta usar el Marco de Catalano .

Puntos clave:

  • Arquitectura como AForge.NET/Accord.NET.
  • Ejecutar en ambos entornos con el mismo código, escritorio y Android.
  • Contiene varios filtros en paralelo.
  • El desarrollo está a todo vapor.

El Marco de Catalano es un marco para la informática científica para Java y Android. El proyecto comenzó como un puerto inicial de las muchas características de los marcos AForge.NET y Accord.NET para .NET, pero está creciendo constantemente con funciones más avanzadas que ahora se están compartiendo entre esos proyectos.

Ejemplo:

 FastBitmap fb = new FastBitmap(bitmap); Grayscale g = new Grayscale(); g.applyInPlace(fb); Threshold t = new Threshold(120); t.applyInPlace(fb); bitmap = fb.toBitmap(); //Show the result 

El mejor enfoque es utilizar GraphicsMagick Image Processing System con im4java como una interfaz de línea de comando para Java.

Hay muchas ventajas de GraphicsMagick, pero una para todos:

  • GM se utiliza para procesar miles de millones de archivos en los sitios de fotos más grandes del mundo (por ejemplo, Flickr y Etsy).

http://im4java.sourceforge.net/ – si está ejecutando linux, bifurcar un nuevo proceso no es costoso.

Para herramientas comerciales, es posible que desee probar Snowbound.

http://www.snowbound.com/

Mi experiencia con ellos es algo anticuada, pero encontré que su API Java Imaging es mucho más fácil de usar que JAI y mucho más rápida.

Su soporte al cliente y muestras de código también fueron muy buenos.

La lista de software de visión RoboRealm menciona JHLabs y NeatVision entre muchas otras bibliotecas que no están basadas en Java.

No puedo decir que es la “mejor” biblioteca, pero creo que puedes probar esto: http://algart.net/java/AlgART/ Es una biblioteca Java de código abierto que admite matrices y matrices “inteligentes” generalizadas con elementos de diferentes tipos (de 1 bit a coma flotante de 64 bits), incluido el procesamiento de imágenes 2D, 3D y multidimensionales y otros algoritmos, que trabajan con matrices y matrices. Lamentablemente, en este momento no hay suficientes ejemplos y demos, pero, por otro lado, contiene muchos JavaDocs. Se encontraba en la base del software comercial (SIMAGIS) durante varios años, pero ahora es de código abierto.