web-dev-qa-db-fra.com

Quel est le meilleur Java bibliothèque / approche de traitement d'image?

J'utilise à la fois les apis JAI Media et ImageMagick?

ImageMagick a quelques problèmes d’évolutivité et JMagick basé sur JNI n’est pas non plus attrayant. JAI a des résultats de qualité médiocre lors des opérations de redimensionnement par rapport à ImageMagick.

Est-ce que quelqu'un connaît d'excellents outils open source ou commerciaux natifs Java et offrant des résultats de haute qualité?

238
Daniel Honig

Il y a ImageJ , qui se vante d'être le

le programme de traitement d'images pur Java le plus rapide au monde

Il peut être utilisé comme une bibliothèque dans une autre application. Son architecture n’est pas brillante, mais elle effectue des tâches de traitement d’images de base.

86
Ivan

Je sais que cette question est assez ancienne, mais à mesure que de nouveaux logiciels apparaissent, il est utile d’obtenir de nouveaux liens vers des projets pouvant intéresser les gens.

imgscalr est une librairie de redimensionnement d'images en Java pur (et des opérations simples comme le rembourrage, le recadrage, la rotation, l'éclaircissement/l'assombrissement, etc.) qui est extrêmement simple à utiliser - une seule classe consiste en un ensemble de graphiques simples. toutes les opérations définies en tant que méthodes statiques permettant de transmettre une image et de récupérer un résultat.

L'exemple le plus élémentaire d'utilisation de la bibliothèque ressemblerait à ceci:

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

Et une utilisation plus typique pour générer des vignettes d’image à l’aide de quelques réglages de qualité et autres pourrait ressembler à ceci:

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);
}

Toutes les opérations de traitement d'images utilisent le pipeline Java2D brut (accéléré par le matériel sur les principales plates-formes) et n'entraînent pas la tâche difficile d'appeler dans votre code via un JNI, comme un conflit de bibliothèques.

imgscalr a également été déployé dans de nombreuses productions à de nombreux endroits - l’inclusion de la classe AsyncScalr en fait un complément idéal pour tout traitement d’images côté serveur.

Il existe de nombreux ajustements de la qualité d'image que vous pouvez utiliser pour trouver un compromis entre vitesse et qualité avec le mode ULTRA_QUALITY le plus élevé, ce qui donne un résultat réduit qui est meilleur que l'implémentation Lancoz3 de GIMP.

130
Riyad Kalla

Une autre bonne alternative: Marvin

30
Joseph

Je ne suis pas un type Java, mais OpenCV est idéal pour mes besoins. Je ne sais pas si ça vous va. Voici un port Java, je pense: http://docs.opencv.org/2.4/doc/tutorials/introduction/desktop_Java/java_dev_intro.html

9
kenny

Traitement est nouveau mais très très bon.

8
fmsf

Essayez d'utiliser Cadre Catalano .

Points clés:

  • Une architecture comme AForge.NET/Accord.NET.
  • Exécuter dans les deux environnements avec le même code, le bureau et Android.
  • Contient plusieurs filtres en parallèle.
  • Le développement est à plein régime.

Le framework Catalano est un framework d’informatique scientifique pour Java et Android. Le projet a débuté en tant que premier portage des nombreuses fonctionnalités des frameworks AForge.NET et Accord.NET pour .NET, mais ne cesse de croître avec des fonctionnalités plus avancées qui sont maintenant partagées entre ces projets.

Exemple:

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
5
Diego Catalano

la meilleure approche consiste à utiliser GraphicsMagick Image Processing System avec im4Java comme interface standard pour Java.

GraphicsMagick présente de nombreux avantages, mais un pour tous:

  • GM est utilisé pour traiter des milliards de fichiers sur les plus grands sites photo du monde (par exemple, Flickr et Etsy).
4
kajo

http://im4Java.sourceforge.net/ - Si vous utilisez Linux, créer un nouveau processus n'est pas coûteux.

3
Amanjit Gill

Le logiciel de vision RoboRealm liste mentionne JHLabs et NeatVision parmi beaucoup d'autres bibliothèques non basées sur Java.

2
rics

Pour les outils commerciaux, vous pouvez essayer Snowbound.

http://www.snowbound.com/

Mon expérience avec eux est un peu dépassée, mais j’ai trouvé que leur API d’imagerie Java était beaucoup plus simple à utiliser que JAI et beaucoup plus rapide.

Le support client et les exemples de code étaient également très bons.

2
Clayton

Je ne peux pas dire que c'est la "meilleure" bibliothèque, mais je pense que vous pouvez essayer ceci: http://algart.net/Java/AlgART/ C'est un open-source Java bibliothèque, prenant en charge les tableaux et matrices "intelligents" généralisés avec des éléments de types différents (de 1 bit à virgule flottante à 64 bits), y compris le traitement des images 2D, 3D et multidimensionnelles et d'autres algorithmes, utilisant des tableaux et des matrices. Malheureusement, à l’heure actuelle, il ne contient pas assez de démos et d’exemples, mais, en revanche, il contient beaucoup de JavaDocs. Il reposait sur la base de logiciels commerciaux (SIMAGIS) pendant plusieurs années, mais il est maintenant open source.

1
Daniel