2012-10-22 45 views
6

Tôi muốn trích xuất khung hình từ video và áp dụng một số bộ lọc trên đó như gabor/hough vv Thư viện Java nào sẽ là hoàn hảo để xử lý tất cả các loại mã hóa video? Tôi đã nhìn vào GStreamer, JMF, Xuggler vv nhưng tôi không thể quyết định cái nào là tốt nhất. Tôi cũng đang tìm cách chỉnh sửa các khung hình và tạo video bằng các khung hình mới.Thư viện xử lý video cho Java

Trả lời

8

Nếu bạn đang tìm kiếm các hoạt động ở mức độ thấp như giải nén khung và thao tác chúng, thì Xuggler sẽ là lựa chọn tốt nhất, vì các API được hướng xung quanh mức thấp này. Nó hoạt động trên ffmpeg để có thể xử lý tất cả các loại mã hóa video.

Không sử dụng JMF cho bất cứ điều gì, cũ, lỗi thời và lỗi - GStreamer là tốt, nhưng API cho vay nhiều hơn để chơi video hơn là thao tác các khung hình.

+0

Cảm ơn! Tôi đoán đó là Xuggler rồi. Nó cũng giống như OpenCV cho Java có thể được cấu hình bằng tay http://answers.opencv.org/question/2137/wrapping-opencv-with-desktop-java-building-for-64/ - bất kỳ ý tưởng nào về điều này sẽ tốt hơn ? – abhishek

+0

Tôi đã không uesd OpenCV vì vậy không thể thực sự bình luận, nhưng vẫn có thể nghiêng về phía Xuggler vì nó là một Java API thuần túy mà sẽ làm cho nhiệm vụ dễ dàng hơn. – berry120

1

JMF là lựa chọn tốt. Nhưng nếu thời gian xử lý quan trọng trong mã của bạn, tốt hơn là sử dụng Xuggler. Rõ ràng, JMF là tổng quát hơn Xuggler.

0

Xuggler, vâng. Nhưng nếu bạn đang làm việc trên rất nhiều xử lý hình ảnh, bạn nên đi với OpenImaj. Thư viện này sử dụng Xuggler như sự phụ thuộc của nó, nhưng đó không phải là tất cả những gì nó làm. Hãy suy nghĩ về khả năng của Opencv mà không thiếu tốc độ mà bạn nhận được trong Java. Ngoài ra, tất cả nó đòi hỏi là thêm một phụ thuộc maven và bạn tốt để đi. Số lượng mã cũng giảm.

Lưu ý: Tôi vẫn đang xem xét thư viện và sẽ tiếp tục cập nhật câu trả lời của tôi về cách thực hiện điều này.

Giới thiệu Video: https://www.youtube.com/watch?v=TNEQ0eNqLgA

1

Bạn có thể thử Marvin Framework. Nó sử dụng JavaCV để mã hóa video và truy cập thiết bị, nhưng tất cả các thuật toán xử lý hình ảnh là Java thuần túy.

Rất dễ tải video và xử lý khung trong thời gian thực, như được minh họa trong ví dụ phát hiện cạnh bên dưới. đang

enter image description here

Nguồn:

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); 
    } 
} 
Các vấn đề liên quan