2012-10-22 37 views
6

ビデオからフレームを抽出し、gabor/houghなどのフィルタを適用したいと思います。すべての種類のビデオエンコーディングを処理するのに最適なJavaライブラリはどれですか?私はGStreamer、JMF、Xugglerなどを見てきましたが、どちらが最善かを決めることはできません。私はまた、フレームを編集し、新しいフレームでビデオを作りたいと考えています。Java用ビデオ処理ライブラリ

答えて

8

フレームを抽出して操作するなどの低レベル操作を行う場合は、APIがこの低レベルに合わせて調整されるため、Xugglerが最適です。これはffmpegで動作するので、すべてのタイプのビデオエンコーディングを処理できます。

古い、古い、バグのあるものは何でもJMFを使用しないでください.GStreamerは良いですが、APIはフレームを操作するのではなく、動画を再生することができます。

+0

ありがとう!私はそれがXugglerだと思います。また、OpenCV for Javaを手動で設定できるように見えます。http://answers.opencv.org/question/2137/wrapping-opencv-with-desktop-java-building-for-64/ - これが良いかどうかについてのアイディア? – abhishek

+0

私はOpenCVをuesdしていないので、本当にコメントすることはできませんが、Xugglerの方に傾いているのは、純粋なJava APIなので、タスクを容易にするはずです。 – berry120

1

JMFは良い選択です。しかし、コード内で処理時間が重要な場合は、Xugglerを使用する方がよいでしょう。明らかに、JMFはXugglerより一般的です。

0

Xuggler、はい。しかし、多くの画像処理に取り組んでいる場合は、OpenImajに行ってください。このライブラリは依存関係としてXugglerを使用していますが、それだけではありません。 Opencvの能力をJavaで得るスピードの欠如なしに考えることができます。また、必要なのは、依存関係を追加することだけです。コード量も削減されます。

ノート:私はまだライブラリを見直していますが、これについての私の答えは更新され続けます。

紹介ビデオ:https://www.youtube.com/watch?v=TNEQ0eNqLgA

1

あなたはMarvin Frameworkを試すことができます。ビデオ符号化とデバイスアクセスにJavaCVを使用しますが、すべての画像処理アルゴリズムは純粋なJavaです。

以下のエッジ検出の例に示すように、ビデオをロードしてリアルタイムでフレームを処理するのは非常に簡単です。

enter image description here

ソースコード:

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); 
    } 
} 
関連する問題