2012-10-22 8 views
6

Desidero estrarre i frame da un video e applicare alcuni filtri su di esso come gabor/hough ecc. Quale libreria Java sarebbe perfetta per gestire tutti i tipi di codifica video? Ho osservato GStreamer, JMF, Xuggler ecc. Ma non sono in grado di decidere quale sarebbe il migliore. Sto anche cercando di modificare i frame e realizzare il video con i nuovi frame.Libreria di elaborazione video per Java

risposta

8

Se stai cercando di eseguire operazioni di basso livello come estrarre i frame e manipolarli, Xuggler sarebbe la scelta migliore, perché le API sono orientate intorno a questo livello basso. Funziona su ffmpeg in modo da poter gestire tutti i tipi di codifiche video.

Non utilizzare JMF per nulla, è obsoleto, obsoleto e bacato.

+0

Grazie! Immagino che sia Xuggler allora. Sembra anche che OpenCV per Java possa essere configurato manualmente http://answers.opencv.org/question/2137/wrapping-opencv-with-desktop-java-building-for-64/ - qualche idea su se sarebbe meglio ? – abhishek

+0

Non ho mai visto OpenCV, quindi non posso davvero commentare, ma probabilmente mi rivolgo a Xuggler dato che si tratta di una pura API Java che dovrebbe semplificare il compito. – berry120

1

JMF è una buona scelta. Ma se il tempo di elaborazione è importante nel tuo codice, è meglio usare Xuggler. Ovviamente, JMF è più generale di Xuggler.

0

Xuggler, sì. Ma se hai intenzione di lavorare su un sacco di elaborazione delle immagini, dovresti andare con OpenImaj. Questa libreria usa Xuggler come dipendenza, ma non è tutto quello che fa. Pensa di avere funzionalità di Opencv senza la mancanza di velocità che ottieni in Java. Inoltre, tutto ciò che serve è aggiungere una dipendenza di esperti e sei a posto. Anche la quantità di codice è ridotta.

Nota: Sto ancora esaminando la libreria e continuerò ad aggiornare la mia risposta su come va.

video introduttivo: https://www.youtube.com/watch?v=TNEQ0eNqLgA

1

si può provare Marvin Framework. Utilizza JavaCV per codifiche video e accesso ai dispositivi, ma tutti gli algoritmi di elaborazione delle immagini sono puramente Java.

È molto facile caricare un video ed elaborare i frame in tempo reale, come mostrato nell'esempio di rilevamento dei bordi di seguito. Codice

enter image description here

Fonte:

import static marvin.MarvinPluginCollection.*; 

public class SimpleVideoProcessing extends JFrame implements Runnable{ 

    private MarvinVideoInterface videoAdapter = new MarvinJavaCVAdapter(); 
    private MarvinImagePanel  videoPanel = new MarvinImagePanel(); 
    private MarvinImage    videoFrame, videoOut = new MarvinImage(640,480); 

    public SimpleVideoProcessing() throws MarvinVideoInterfaceException{ 
     super("Simple Video Processing using Marvin"); 
     add(videoPanel); 
     // Load video file and start the processing thread 
     videoAdapter.loadResource("./res/snooker.wmv"); 
     new Thread(this).start(); 
     setSize(640,500); 
     setVisible(true); 
    } 

    public void run() { 
     try { 
      while(true){ 
       // Request, process and show the video frame. 
       videoOut.clear(); 
       videoFrame = videoAdapter.getFrame(); 
       prewitt(videoFrame.clone(), videoOut); 
       videoPanel.setImage(videoOut); 
      } 
     } catch (MarvinVideoInterfaceException e) { 
      e.printStackTrace(); 
     } 
    } 

    public static void main(String[] args) throws MarvinVideoInterfaceException { 
     new SimpleVideoProcessing().setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
}