OpenCV + Java = UnsatisfiedLinkError

我需要从我的USB网络摄像头捕获视频流,为此我使用Opencv 2.4.6在Java中进行开发。我按照此处列出的步骤操作

我将“C:\opencv\build\java\x64”目录添加到我的系统路径中,并将“opencv-246.jar”文件包含在 ECLIPSE 上的库中。当 y 运行 explame 时

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;

public class Main {
    public static void main(String[] args) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        Mat m  = Mat.eye(3, 3, CvType.CV_8UC1);
        System.out.println("m = " + m.dump());
    }
}

我得到

m = [1, 0, 0;
  0, 1, 0;
  0, 0, 1]

确定 =)

但是当我跑步时

import org.opencv.highgui.VideoCapture;

public class Main {
    public static void main(String[] args) {
        VideoCapture vc = new VideoCapture(0);
        if(vc.isOpened()){
            System.out.println("Works!");
        }
    }
}

我得到

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.highgui.VideoCapture.n_VideoCapture(I)J
    at org.opencv.highgui.VideoCapture.n_VideoCapture(Native Method)
    at org.opencv.highgui.VideoCapture.<init>(VideoCapture.java:113)
    at Main.main(Main.java:5)

我添加所有路线包含:

C:\opencv\build\x64\vc10

一个接一个,但不起作用。

最后,我用C:\opencv\build\x64\vc10创建了一个名为OPENCV_DIR的变量,但仍然得到UnsatisfiedLinkError。

请帮帮我!


答案 1

在第二个示例中,您跳过了这一行

 System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

所以 opencv 库没有被加载,不满意的LinkError,等等...

[编辑]:

感谢@Jishnu Prathap突出显示了java.library路径问题,如果你遇到设置问题,你仍然可以尝试使用java包装器so/dll/dylib的绝对路径,比如:

 System.load("/path to/our/java_wrapper");

答案 2

我在将OpenCV与java一起使用时遇到了类似的错误。我做了2件事来解决它。

  1. static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }
  2. 我将路径添加到OpenCV dll或.so到javalibpath或path。由于某种原因,这实际上不起作用,我最终将OpenCV dll放在system32文件夹中

推荐