【问题标题】:OpenCV Classpath in NetbeansNetbeans 中的 OpenCV 类路径
【发布时间】:2012-02-27 01:34:59
【问题描述】:

我刚开始在 MacOSX 下使用 JavaCV。我从最新的源代码用 CMake 编译了 OpenCV,并将库所在的路径放入 -Djava.library.path=\path\to\libraries JVM 参数中,并在我的项目设置中添加了 JavaCV 库。我还尝试了其他几个 Classpath 的变体。但是当我启动一个简单的项目以从我的网络摄像头中抓取一张图像时,我收到以下错误:

Exception in thread "Thread-3" java.lang.UnsatisfiedLinkError: no jnivideoInputLib in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1758)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1045)
    at com.googlecode.javacpp.Loader.load(Loader.java:358)
    at com.googlecode.javacpp.Loader.load(Loader.java:285)
    at com.googlecode.javacv.cpp.videoInputLib.<clinit>(videoInputLib.java:80)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at com.googlecode.javacpp.Loader.load(Loader.java:305)
    at com.googlecode.javacpp.Loader.load(Loader.java:285)
    at com.googlecode.javacv.cpp.videoInputLib$videoInput.<clinit>(videoInputLib.java:192)
    at com.googlecode.javacv.VideoInputFrameGrabber.start(VideoInputFrameGrabber.java:89)
    at webcampong.Grabber.run(Grabber.java:35)
    at java.lang.Thread.run(Thread.java:680)

【问题讨论】:

  • 不,我已经试过了。 w/windows 和 linux 运行良好。但由于我是 macosx 的新手,我不确定我是否以正确的方式编译了库。有人可以告诉我编译后得到的文件是什么样的吗?我只在 /lib 文件夹中得到一堆 dylib 文件一个 cv.so 文件左右。您发布的问题中的 jni 文件不是在那里。也许我看的地方不对,或者它们根本不是 gcc 制作的

标签: java netbeans opencv osx-lion javacv


【解决方案1】:

这是由于您的 openCV 和 javaCV 库的兼容性问题。 尝试下载兼容的openCV库(包含bin文件夹)。

【讨论】:

    【解决方案2】:

    VideoInputFrameGrabber 仅适用于 Windows。

    如 JavaCV 的 README.txt 中所述:

    • 新的videoInputLib 包装器和对应的VideoInputFrameGrabber 可使用 DirectShow 进行捕获,在 Windows 7 下很有用,其中 OpenCV 和 FFmpeg 无法使用 Video for Windows 进行捕获(问题 #58)

    【讨论】:

      【解决方案3】:

      我使用 javacpp 和 videoinput 来操作摄像机。当我调用“videoInput.listDevices()”时,出现错误“java.lang.UnsatisfiedLinkError: no jnivideoInputLib in java.library.path”。 我通过添加如下代码来解决问题:

      org.bytedeco.javacpp.Loader.load(org.bytedeco.javacpp.opencv_highgui.class);
      System.out.println(videoInput.listDevices());
      

      在调用其他方法之前必须先调用'Loader.load',我不知道为什么。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-23
        • 2020-01-13
        • 2012-10-21
        • 1970-01-01
        • 2011-11-27
        • 1970-01-01
        • 2011-08-14
        • 1970-01-01
        相关资源
        最近更新 更多