【问题标题】:java capturing webcam images macbookjava捕获网络摄像头图像macbook
【发布时间】:2014-01-17 12:53:54
【问题描述】:

我目前正在开始一个项目,我想从我的网络摄像头捕获和操作数据流,以便开始我想从我的网络摄像头拍摄一些照片并将这些照片展示给用户。然而,这给出了一个错误。

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 的说法,我不应该得到一个

线程“Thread-3”java.lang.UnsatisfiedLinkError 中的异常:java.library.path 中没有 jnivideoInputLib

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)

异常。

【问题讨论】:

  • 错误是抱怨缺少原生库。类似问题:code.google.com/p/javacv/issues/detail?id=307。如果我理解正确,videoInput 仅适用于 Windows。您需要使用不同的库。
  • 即使使用链接中建议的其他类,它似乎也无法正常工作,因为它仍然会引发错误,还有其他想法吗?
  • 尝试使用 FrameGrabber.createDefault(0)
  • 添加它会给我一个空指针异常我应该改变 FrameGrabber grabber = new VideoInputFrameGrabber(0);进入抓取器 = FrameGrabber.createDefault(0);对吗?

标签: java macos exception webcam javacv


【解决方案1】:

顺便说一句,如果有人知道另一种简单的方法来从我的 将网络摄像头转换为 java 会有所帮助。

由于您使用的是 macbook,因此您可以执行以下操作:

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

【讨论】:

  • 这会创建当前屏幕的屏幕截图。不是来自网络摄像头的图像。
  • 你是对的。我在想你的图像已经出现在屏幕上了。我注意到在您的代码中,您正在调用新的 VideoInputFrameGrabber(0)。您是否尝试过调用 FrameGrabber.createDefault(0)?
  • 这似乎在 FrameGrabber.createDefault(0) 上生成了一个空指针异常
  • 这听起来很奇怪。您是否可能将其称为实例而不是静态的(grabber.createDefault 而不是 FrameGrabber.createDefault)。如果没有,您可以发布堆栈跟踪吗?
  • Exception in thread "Thread-3" java.lang.NullPointerException at com.googlecode.javacv.FrameGrabber.create(FrameGrabber.java:95) at com.googlecode.javacv.FrameGrabber.createDefault(FrameGrabber.java:118) at quicktest.run(quicktest.java:20) at java.lang.Thread.run(Thread.java:695) 第 20 行为 grabber =FrameGrabber.createDefault(0);
【解决方案2】:

您的 JavaCV 似乎设置不正确。

你做了以下事情吗?

  1. 从here下载xxx-bin.zip和xxx-cppjars.zip
  2. 解压 .zip 文件
  3. 将 xxx-macosx-x86_64.jar 添加到您的 Eclipse 项目中

【讨论】:

    【解决方案3】:

    我也遇到了同样的问题。 我使用 Mac OSX 和 OpenCV-2.4.10 和 Java CV 0.10

    我在尝试运行 ColoredObjectTrack.java 时遇到的这个问题(存在于 javaCV-Samples 中) 我使用 OpenCVFrameGrabber 而不是 VideoInputFrameGrabber。它奏效了。

    【讨论】:

    • 您能否提供更多信息?您可以添加示例代码或文档中的引用。
    猜你喜欢
    • 1970-01-01
    • 2013-02-09
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多