9

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

4

4 回答 4

12

如果您正在寻找执行低级别操作,例如提取帧并对其进行操作,那么 Xuggler 将是最佳选择,因为 API 是针对此低级别的。它适用于 ffmpeg,因此可以处理所有类型的视频编码。

不要将 JMF 用于任何事情,它陈旧、过时且有问题 - GStreamer 很好,但 API 更适合播放视频而不是操纵帧。

于 2012-10-22T12:31:35.257 回答
3

你可以试试Marvin 框架。它使用 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);
    }
}
于 2016-06-30T03:52:04.933 回答
1

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

于 2012-10-28T20:48:01.213 回答
0

许格勒,是的。但是,如果您要进行大量图像处理,则应该使用OpenImaj。该库使用 Xuggler 作为其依赖项,但这并不是它的全部功能。想想拥有 Opencv 的功能,而不会缺乏 Java 中的速度。此外,它所需要的只是添加一个 Maven 依赖项,你就可以开始了。代码量也减少了。

注意:我仍在审查图书馆,并将继续更新我的答案。

介绍视频:https ://www.youtube.com/watch?v=TNEQ0eNqLgA

于 2016-06-22T15:37:00.707 回答