2012-10-22 4 views
6

Je souhaite extraire des images d'une vidéo et y appliquer des filtres tels que gabor/hough, etc. Quelle bibliothèque Java serait parfaite pour gérer toutes sortes de codages vidéo? J'ai regardé GStreamer, JMF, Xuggler etc. mais je suis incapable de décider lequel serait le meilleur. Je cherche aussi à éditer les images et à faire la vidéo avec les nouveaux cadres.Bibliothèque de traitement vidéo pour Java

Répondre

8

Si vous cherchez à faire des opérations de bas niveau telles que l'extraction de cadres et leur manipulation, alors Xuggler serait le meilleur choix, car les API sont orientées autour de ce bas niveau. Il fonctionne sur ffmpeg et peut donc gérer tous les types de codages vidéo. N'utilisez pas JMF pour rien, c'est vieux, obsolète et buggé - GStreamer est bon, mais l'API se prête plus à la lecture de vidéos qu'à la manipulation des images.

+0

Merci! Je suppose que c'est Xuggler alors. Il semble aussi que OpenCV for Java puisse être configuré manuellement http://answers.opencv.org/question/2137/wrapping-opencv-with-desktop-java-building-for-64/ - des idées sur si cela serait mieux ? – abhishek

+0

Je n'ai pas uesd OpenCV donc je ne peux pas vraiment commenter, mais je pencherais probablement vers Xuggler puisque c'est une pure API Java qui devrait faciliter la tâche. – berry120

1

JMF est un bon choix. Mais si le temps de traitement est important dans votre code, il est préférable d'utiliser Xuggler. Évidemment, JMF est plus général que Xuggler.

0

Xuggler, oui. Mais si vous allez travailler sur beaucoup de traitement d'image, vous devriez aller avec OpenImaj. Cette bibliothèque utilise Xuggler comme dépendance, mais ce n'est pas tout ce qu'elle fait. Pensez à avoir des capacités d'Opencv sans le manque de vitesse que vous obtenez en Java. En outre, tout ce qu'il faut, c'est ajouter une dépendance Maven et vous êtes prêt à partir. La quantité de code est également réduite.

Remarque: Je continue d'examiner la bibliothèque et je continuerai à mettre à jour ma réponse sur la façon dont cela se passe.

Vidéo d'introduction: https://www.youtube.com/watch?v=TNEQ0eNqLgA

1

Vous pouvez essayer Marvin Framework. Il utilise JavaCV pour les encodages vidéo et l'accès aux périphériques, mais tous les algorithmes de traitement d'image sont en Java pur.

Il est très facile de charger une vidéo et de traiter les images en temps réel, comme indiqué dans l'exemple de détection des contours ci-dessous.

enter image description here

code source:

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