2014-01-17 169 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