OpenCV + Java = UnsatisfiedLinkError

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

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

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.(VideoCapture.java:113) at Main.main(Main.java:5) 

我添加所有包含的路线:

C:\ OpenCV的\建设\ 64 \ VC10

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

最后,我创建了一个名为OPENCV_DIR的变量,其中包含C:\ opencv \ build \ x64 \ _vc10但仍然获得UnsatisfiedLinkError。

请帮帮我!

在第二个例子中,你跳过了这一行

  System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 

所以opencv libs没有加载,UnsatisfiedLinkError等…

[编辑]:

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

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

在使用OpenCV和java时我遇到了类似的错误。我做了两件事来解决它。

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

对于使用opencv3.x的一般用户:

对于opencv 3.0及更高版本,Java中不再存在HighGUI模块。

 import org.opencv.videoio.VideoCapture; 

代替

 import org.opencv.highgui.VideoCapture; 

videoio包括VideoCapture,VideoWriter。

同理:

imgcodecs包括imread / imwrite和朋友

例:

 Highgui.imread(fileName) 

– >

  Imgcodecs.imread(fileName) 

所以,我也遇到了这个问题,我做了你们所有的建议,它在我的x64窗口中运行良好,但在x86中无法使其正常工作。

最后我通过改变找到了一个解决方案:

 VideoCapture capture = new VideoCapture(0); 

对于

  VideoCapture capture = new VideoCapture(); capture.open("resources/vid.MP4"); 

我不知道为什么会这样,但我希望它可以帮助我解决同样的问题。

请尝试以下代码

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

import nu.pattern.OpenCV;

公共课OpencvMain {

 public static void main( String[] args ) { OpenCV.loadLocally(); Mat mat = Mat.eye( 3, 3, CvType.CV_8UC1 ); System.out.println( "mat = " + mat.dump() ); } 

}