Javavideo处理库

我想从video中提取帧并在其上应用一些filter,例如gabor / hough等。哪个Java库非常适合处理各种video编码? 我一直在看GStreamer,JMF,Xuggler等,但我无法确定哪一个是最好的。 我也希望编辑帧并使用新帧制作video。

如果你想要进行低级操作,比如提取帧和操作它们,那么Xuggler将是最好的选择,因为API适用于这个低级别。 它适用于ffmpeg,因此可以处理所有类型的video编码。

不要将JMF用于任何东西,它是旧的,过时的和错误的 – GStreamer很好,但API更适合播放video而不是操纵帧。

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

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

在此处输入图像描述

源代码:

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

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

Xuggler,是的。 但是,如果您要进行大量的图像处理,则应该使用OpenImaj 。 这个库使用Xuggler作为它的依赖,但这并不是它的全部function。 想想拥有Opencv的function而不会缺乏Java中的速度。 此外,它所需要的只是添加一个maven依赖,你很高兴。 代码量也减少了。

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

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

    Interesting Posts