Qual è la migliore libreria / approccio per l'elaborazione delle immagini Java? [chiuso]
-
03-07-2019 - |
Domanda
Sto usando sia l'apis multimediale JAI sia ImageMagick?
ImageMagick presenta alcuni problemi di scalabilità e anche JMagick basato su JNI non è attraente. JAI ha risultati di scarsa qualità quando si eseguono operazioni di ridimensionamento rispetto a ImageMagick.
Qualcuno conosce strumenti eccellenti sia open source che commerciali che sono nativi Java e forniscono risultati di alta qualità?
Soluzione
C'è ImageJ , che vanta di essere il
pura immagine Java più veloce del mondo programma di elaborazione
Può essere usato come libreria in un'altra applicazione. La sua architettura non è geniale, ma svolge compiti basilari di elaborazione delle immagini.
Altri suggerimenti
So che questa domanda è piuttosto vecchia, ma quando esce un nuovo software aiuta a ottenere alcuni nuovi collegamenti a progetti che potrebbero essere interessanti per la gente.
imgscalr è un ridimensionamento delle immagini in puro Java (e semplici operazioni come il riempimento, il ritaglio, la rotazione, la luminosità) / dimming, ecc.) che è dolorosamente semplice da usare - una singola classe è costituita da un insieme di semplici operazioni grafiche tutte definite come metodi statici per passare un'immagine e ottenere un risultato.
L'esempio più basilare di utilizzo della libreria sarebbe simile al seguente:
BufferedImage thumbnail = Scalr.resize(image, 150);
E un uso più tipico per generare miniature di immagini usando alcune modifiche di qualità e simili potrebbe apparire così:
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);
}
Tutte le operazioni di elaborazione delle immagini utilizzano la pipeline Java2D non elaborata (che è accelerata dall'hardware sulle piattaforme principali) e non introdurranno il dolore di richiamare tramite il conflitto della libreria JNI come nel tuo codice.
imgscalr è stato anche implementato in produzioni su larga scala in parecchi posti - l'inclusione della classe AsyncScalr lo rende un perfetto drop-in per qualsiasi elaborazione di immagini lato server.
Esistono numerose modifiche alla qualità dell'immagine che è possibile utilizzare per bilanciare tra velocità e qualità con la modalità ULTRA_QUALITY più alta che fornisce un risultato in scala che sembra migliore dell'implementazione Lancoz3 di GIMP.
Un'altra valida alternativa: Marvin
Non sono un tipo Java, ma OpenCV è perfetto per le mie esigenze. Non sono sicuro che si adatti al tuo. Ecco una porta Java, penso: http://docs.opencv.org/2.4/doc/ tutorial / introduzione / desktop_java / java_dev_intro.html
L'elaborazione è nuova ma molto, molto buona.
Prova a utilizzare Catalano Framework .
Punti chiave:
- Architettura come AForge.NET/Accord.NET.
- Esegui in entrambi gli ambienti con lo stesso codice, desktop e Android.
- Contiene diversi filtri in parallelo.
- Lo sviluppo è a pieno ritmo.
Il Catalano Framework è un framework per il calcolo scientifico per Java e Android. Il progetto è iniziato come una porta iniziale delle numerose funzionalità dei framework AForge.NET e Accord.NET per .NET, ma è in costante crescita con funzionalità più avanzate che vengono ora condivise tra tali progetti.
Esempio:
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
imo l'approccio migliore sta usando Sistema di elaborazione delle immagini GraphicsMagick con im4java come interfaccia a riga di comando per Java.
Ci sono molti vantaggi di GraphicsMagick, ma uno per tutti:
- GM viene utilizzato per elaborare miliardi di file nella foto più grande del mondo siti (ad esempio Flickr ed Etsy).
http://im4java.sourceforge.net/ - se stai eseguendo Linux biforcando un nuovo il processo non è costoso.
Per strumenti commerciali, potresti provare Snowbound.
La mia esperienza con loro è in qualche modo datata, ma ho trovato la loro API Java Imaging molto più facile da usare rispetto a JAI e molto più veloce.
Anche il supporto clienti e gli esempi di codice sono stati molto buoni.
Il software di visione RoboRealm list menziona JHLabs e NeatVision tra molte altre librerie non basate su Java.
Non posso dire che sia il "migliore" libreria, ma penso che tu possa provare questo: http://algart.net/java/AlgART/ È una libreria Java open source che supporta "smart" quotata in modo generalizzato matrici e matrici con elementi di diversi tipi (da 1 bit a 64 bit in virgola mobile), tra cui l'elaborazione di immagini 2D, 3D e multidimensionali e altri algoritmi, lavorando con matrici e matrici. Purtroppo in questo momento non contiene abbastanza demo ed esempi, ma, d'altra parte, contiene molti JavaDocs. È stato alla base del software commerciale (SIMAGIS) per diversi anni, ma ora è open-source.