2014-01-17 223 views
1

我目前正在開始一個項目,我想從我的攝像頭捕捉和操作數據流以啓動我想從我的攝像頭拍攝一些照片並將其顯示給用戶。然而這給了一個錯誤。java捕捉攝像頭圖像macbook

public class quicktest implements Runnable { 
     public static void main(String[] args){ 
      Thread t=new Thread(new quicktest()); 
      t.start(); 
     } 

     IplImage image; 
     CanvasFrame canvas = new CanvasFrame("Web Cam"); 
     public quicktest() { 
      canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE); 
     } 
     @Override 
     public void run() { 
      FrameGrabber grabber = new VideoInputFrameGrabber(0); 

      int i=0; 
      try { 
       grabber.start(); 
       IplImage img; 
       while (true) { 
        img = grabber.grab(); 
        if (img != null) { 
         cvFlip(img, img, 1);// l-r = 90_degrees_steps_anti_clockwise 
         // show image on window 
         canvas.showImage(img); 
        } 
        Thread.sleep(1000); 
       } 
      } catch (Exception e) { 
      } 
     } 

這給了以下異常:

Exception in thread "Thread-3" java.lang.UnsatisfiedLinkError: no jnivideoInputLib in java.library.path 
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1764) 
    at java.lang.Runtime.loadLibrary0(Runtime.java:823) 
    at java.lang.System.loadLibrary(System.java:1044) 
    at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:711) 
    at com.googlecode.javacpp.Loader.load(Loader.java:586) 
    at com.googlecode.javacpp.Loader.load(Loader.java:540) 
    at com.googlecode.javacv.cpp.videoInputLib.<clinit>(videoInputLib.java:81) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:249) 
    at com.googlecode.javacpp.Loader.load(Loader.java:561) 
    at com.googlecode.javacpp.Loader.load(Loader.java:540) 
    at com.googlecode.javacv.cpp.videoInputLib$videoInput.<clinit>(videoInputLib.java:193) 
    at com.googlecode.javacv.VideoInputFrameGrabber.start(VideoInputFrameGrabber.java:101) 
    at com.googlecode.javacv.VideoInputFrameGrabber.start(VideoInputFrameGrabber.java:98) 
    at quicktest.run(quicktest.java:27) 
    at java.lang.Thread.run(Thread.java:695) 

我已經搜索並嘗試什麼建議here,但是這給了我另一個錯誤:

at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:249) 
at com.googlecode.javacpp.Loader.load(Loader.java:561) 
at com.googlecode.javacpp.Loader.load(Loader.java:540) 
at com.googlecode.javacv.cpp.videoInputLib$videoInput.<clinit>(videoInputLib.java:193) 
at Main.main(Main.java:5) 

沒有人知道如何解決這個?順便說一下,這發生在MacBook Pro 10.7.5並試圖使用網絡攝像頭內置。雖然它明顯不應該重要,但也有附加的大裂谷。 使用OpenCVFrameGrabber 代替給我一個java.lang.UnsatisfiedLinkError: no jniopencv_highgui in java.library.path異常。

順便說一句,如果有人知道另一種簡單的方法來從我的攝像頭獲取圖像到java將有所幫助。

已經做了什麼benny.la說我isntead線程 「線程3」 java.lang.UnsatisfiedLinkError中得到

例外:無jnivideoInputLib中的java.library.path

at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1764) 
at java.lang.Runtime.loadLibrary0(Runtime.java:823) 
at java.lang.System.loadLibrary(System.java:1044) 
at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:711) 
at com.googlecode.javacpp.Loader.load(Loader.java:586) 
at com.googlecode.javacpp.Loader.load(Loader.java:540) 
at com.googlecode.javacv.cpp.videoInputLib.<clinit>(videoInputLib.java:81) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:249) 
at com.googlecode.javacpp.Loader.load(Loader.java:561) 
at com.googlecode.javacpp.Loader.load(Loader.java:540) 
at com.googlecode.javacv.cpp.videoInputLib$videoInput.<clinit>(videoInputLib.java:193) 
at com.googlecode.javacv.VideoInputFrameGrabber.start(VideoInputFrameGrabber.java:101) 
at com.googlecode.javacv.VideoInputFrameGrabber.start(VideoInputFrameGrabber.java:98) 
at quicktest.run(quicktest.java:29) 
at java.lang.Thread.run(Thread.java:695) 

例外。

+0

錯誤是抱怨缺少本地庫。類似問題:http://code.google.com/p/javacv/issues/detail?id=307。如果我理解正確,'videoInput'僅適用於Windows。你需要使用不同的庫。 –

+0

即使在鏈接內建議的其他類也不能正常工作,因爲它仍會引發錯誤,還有其他想法嗎? – Thijser

+0

嘗試使用FrameGrabber。createDefault(0) – Dyrborg

回答

1

By the way if anyone knows another easy way to get images from my webcam into java that would be helpful to.

既然你是在MacBook上,你可以這樣做mething like:

Runtime.getRuntime().exec("screencapture tempfile.jpg"); 
InputStream in = new FileInputStream("tempfile.jpg"); 
+0

這會創建當前屏幕的屏幕截圖。不是來自攝像頭的圖像。 – Thijser

+0

你說得對。我在想,你已經在屏幕上顯示圖像了。我注意到你的代碼中,你正在調用新的VideoInputFrameGrabber(0)。你有沒有嘗試調用FrameGrabber.createDefault(0)? –

+0

這似乎在FrameGrabber.createDefault(0)上產生空指針異常而不是 – Thijser

1

看起來您的JavaCV設置不正確。

你做了以下幾件事嗎?

  1. 下載xxx-bin.ziphere
  2. xxx-cppjars.zip提取.zip文件
  3. XXX-MacOSX的-x86_64.jar添加到您的Eclipse項目
+0

這會做一些事情,但會給我另一個錯誤 – Thijser

1

我也面臨同樣的問題。 我使用的是Mac OSX與OpenCV的-2.4.10與Java CV 0.10

這個問題,當我試圖運行ColoredObjectTrack.java(存在於javaCV樣本)我是越來越 我用OpenCVFrameGrabber代替VideoInputFrameGrabber。有效。

+1

你能否提供一些更多的信息?您可以添加示例代碼或來自文檔的引用。 – ForceBru