2012-10-22 22 views
6

Ich möchte Frames aus einem Video extrahieren und einige Filter darauf anwenden, wie zB gabor/hough usw. Welche Java-Bibliothek wäre perfekt für die Verarbeitung aller Arten von Video-Kodierungen? Ich habe GStreamer, JMF, Xuggler etc. angeschaut, kann mich aber nicht entscheiden, welches das beste wäre. Ich suche auch, um die Rahmen zu bearbeiten und das Video mit den neuen Rahmen zu machen.Video Processing Library für Java

Antwort

8

Wenn Sie Low-Level-Operationen wie das Extrahieren von Frames und das Manipulieren von Frames ausführen möchten, ist Xgugler die beste Wahl, da die APIs auf dieser niedrigen Ebene ausgerichtet sind. Es funktioniert auf ffmpeg und kann alle Arten von Videocodierungen verarbeiten.

Verwenden Sie JMF nicht für irgendetwas, es ist alt, veraltet und fehlerhaft - GStreamer ist gut, aber die API eignet sich eher zum Abspielen von Videos als zum Manipulieren der Frames.

+0

Dank! Ich schätze, dann ist es Xuggler. Es sieht auch so aus, als könnte OpenCV für Java manuell konfiguriert werden http://answers.opencv.org/question/2137/wrapping-opencv-with-desktop-java-building-for-64/ - irgendwelche Ideen, ob das besser wäre ? – abhishek

+0

Ich habe OpenCV nicht benötigt, kann also nicht wirklich kommentieren, würde aber wahrscheinlich immer noch zu Xuggler neigen, da es eine reine Java-API ist, die die Aufgabe erleichtern sollte. – berry120

1

JMF ist eine gute Wahl. Aber wenn die Prozesszeit in Ihrem Code wichtig ist, ist es besser, Xuggler zu verwenden. Offensichtlich ist JMF allgemeiner als Xuggler.

0

Xuggler, ja. Aber wenn Sie an einer Vielzahl von Bildverarbeitung arbeiten, sollten Sie mit OpenImaj gehen. Diese Bibliothek verwendet Xuggler als ihre Abhängigkeit, aber das ist nicht alles was sie tut. Denken Sie daran, Fähigkeiten von Opencv ohne die Geschwindigkeit zu haben, die Sie in Java bekommen. Alles, was es erfordert, ist eine Abhängigkeit von Maven hinzuzufügen und Sie sind gut zu gehen. Die Menge an Code ist ebenfalls reduziert.

Hinweis: Ich überprüfe immer noch die Bibliothek und werde meine Antwort auf dem Laufenden halten, wie das geht.

Einführungsvideo: https://www.youtube.com/watch?v=TNEQ0eNqLgA

1

Sie können Marvin Framework versuchen. Es verwendet JavaCV für Videocodierungen und Gerätezugriff, aber alle Bildverarbeitungsalgorithmen sind reines Java.

Es ist sehr einfach, ein Video zu laden und die Bilder in Echtzeit zu verarbeiten, wie im folgenden Beispiel gezeigt.

enter image description here

Quellcode:

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