我想提取从视频帧,它适用于一些过滤器,如的Gabor /霍夫等。其中的Java库将是完美的处理各种视频编码的? 我一直在寻找的GStreamer,JMF,Xuggler等。但我无法决定哪一个是最好的。 我也期待编辑框架,使影片具有了新的框架。
Answer 1:
如果你正在寻找这样做低级操作,如提取帧和操纵它们,然后Xuggler将是最好的选择,因为这些API都是围绕这个水平低为目标。 它的工作原理上的ffmpeg这样可以处理所有类型的视频编码。
不要使用JMF什么,这是旧的,过时的和马车 - GStreamer是好的,但API更适合于播放视频,而不是操纵帧。
Answer 2:
你可以试试马文框架 。 它采用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);
}
}
Answer 3:
JMF是一个不错的选择。 但是,如果处理时间是在你的代码很重要,它是更好地使用Xuggler。 显然,JMF比Xuggler比较一般。
Answer 4:
Xuggler,是的。 但是,如果你将要从事大量的图像处理,你应该去OpenImaj 。 此库使用Xuggler作为它的依赖,但是这还不是全部它做什么。 认为有opencv的能力不缺乏速度,你在Java中获得的。 此外,它所需要的是增加一个Maven的依赖,你是好去。 的代码量也减少了。
注 :我仍在评估库,并会不断更新我这是如何去回答。
介绍视频: https://www.youtube.com/watch?v=TNEQ0eNqLgA
文章来源: Video Processing Library for Java