Java视频处理库

Java视频处理库,java,video-processing,gstreamer,jmf,xuggle,Java,Video Processing,Gstreamer,Jmf,Xuggle,我想从视频中提取帧并对其应用一些过滤器,如gabor/hough等。哪个Java库最适合处理各种视频编码?我一直在看GStreamer、JMF、Xuggler等,但无法决定哪一个是最好的。我还希望编辑帧,并使用新帧制作视频。如果您希望执行低级别操作,例如提取帧并对其进行操作,那么Xugler将是最佳选择,因为API是围绕这一低级别而设计的。它在ffmpeg上工作,因此可以处理所有类型的视频编码 不要在任何事情上使用JMF,它是旧的、过时的和有缺陷的——GStreamer很好,但API更适合于播放

我想从视频中提取帧并对其应用一些过滤器,如gabor/hough等。哪个Java库最适合处理各种视频编码?我一直在看GStreamer、JMF、Xuggler等,但无法决定哪一个是最好的。我还希望编辑帧,并使用新帧制作视频。

如果您希望执行低级别操作,例如提取帧并对其进行操作,那么Xugler将是最佳选择,因为API是围绕这一低级别而设计的。它在ffmpeg上工作,因此可以处理所有类型的视频编码


不要在任何事情上使用JMF,它是旧的、过时的和有缺陷的——GStreamer很好,但API更适合于播放视频而不是操纵帧。

JMF是一个不错的选择。但是,如果处理时间在代码中很重要,那么最好使用Xugler。显然,JMF比Xuggler更通用。

Xuggler,是的。但是如果你要做大量的图像处理工作,你应该去做。这个库使用Xugler作为它的依赖项,但这并不是它的全部功能。考虑一下,在不缺乏Java速度的情况下拥有Opencv的功能。此外,它所需要的只是添加一个maven依赖项,您就可以开始了。代码量也减少了

注意:我仍在审查图书馆,并将不断更新我的答案

介绍视频:

你可以试试。它使用JavaCV进行视频编码和设备访问,但所有图像处理算法都是纯Java的

加载视频并实时处理帧非常容易,如下面的边缘检测示例所示

源代码:

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

谢谢我猜是Xuggler吧。它看起来还可以手动配置OpenCV for Java-这是否更好?我还没有使用OpenCV,因此无法发表评论,但可能还是会倾向于Xugler,因为它是一个纯Java API,应该会使任务更简单。