Opencv Java异常

时间:2012-10-11 13:33:01

标签: java opencv

我正在使用Windows 7并在尝试运行使用opencv库的Java项目时遇到此异常:

Exception in thread "main" 
java.lang.UnsatisfiedLinkError: no opencv_java in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at org.opencv.highgui.Highgui.<clinit>(Highgui.java:416)
at teste.main(teste.java:21)

我做错了什么?有些进口缺失吗?

我想在Eclipse(不是Android)中创建一个使用openCV的简单Java项目。

  • 所以我将javacv从OpenCV-2.4.2.exe文件解压缩到C:\
  • 然后执行“cmake -G”MinGW Makefiles“-DBUILD_opencv_java = ON C:\ opencv“命令,之后,”mingw32-make“。一切都是 建立没有错误或警告
  • 我将opencv dll添加到我的环境变量
  • 之后

6 个答案:

答案 0 :(得分:6)

引发此异常是因为系统正在尝试查找OpenCV对此特定平台所需的本机库,但却找不到它们。

Exception in thread "main" 
java.lang.UnsatisfiedLinkError: no opencv_java in java.

解决此错误

  1. 如果您使用的是opencv版本&lt; opencv 2.4.6 那么@ user3033420给出的答案是解决方案。
  2. 如果您使用的是&gt; = opencv 2.4.6 版本,则jar在核心类中有一个名为 NATIVE_LIBRARY_NAME的常量变量你在FaceDetector类中给loadLibrary()函数添加opencv的功能,你可能已经有了这个:

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    
  3. 使用上面提到的常量,不需要记住strang dll文件的名称。

    opencv 2.4.9.jar从项目首选项添加到构建路径中:

    Window -> Preferences -> Java Build Path –> Add Library -> User Libraries -> 
    User Library -> & click New
    

    您将看到如下对话框。 将opencv-2.4.9添加为库名称&amp;单击“确定”。

    Create New User Library

    然后Add External Jar&amp;找到你的opencv jar&amp;点击确定。然后展开opencv-2.4.9.jar&amp;点击原生图书馆位置(无),如下所示:

    Add Native Library Location of OpenCV

    必要步骤:输入包含“opencv-2.4.9”&amp ;;使用的本机库的文件夹的位置。然后单击OK,如下所示:

    Native Library Folder Configuration

    现在,jar现在拥有了完成工作所需的所有本机库。重建java程序,一切都应该按照设计编译和运行。

答案 1 :(得分:5)

如果您收到此错误:

Exception in thread "main" 
java.lang.UnsatisfiedLinkError: no opencv_java in java.library.path

这可能意味着你是从臀部拍摄,通过布朗运动编程,试图让openCV工作。就像试图通过疯狂地按下所有按钮来弄清楚飞机如何在飞行中工作一样。你将度过一段美好的时光。

错误的含义:

Eclipse告诉您jar文件无法找到完成其工作所需的库。所以,在你将它们提供之前,它自然不会起作用。您必须找到关于&#34;如何从源代码构建openCV的教程&#34;在您的特定平台上:(windows,mac,linux等),(32位,64位等)。

基本上,你掩盖了原生图书馆的位置&#39;设置,或者没有正确设置它们,因此jar无法找到用C编写的支持库。

如何解决,千尺观看

  1. 为您的操作系统下载openCV的源代码。
  2. 按照说明从源代码构建openCV。
  3. 将jar复制到Java项目的lib目录中。
  4. 通过设置&#34;本机库位置&#34;配置jar以查找其本机库。从源代码构建openCV的路径下的build/lib目录。
  5. 清理构建java项目,并且UnsatisfiedLinkError应该消失。
  6. 此博客分步介绍了上述步骤:https://udallascs.wordpress.com/2014/03/30/adding-opencv-and-configuring-to-work-with-eclipse-and-java/

    为什么这只是一个简单的jar?

    因为大多数openCV都是用C编程语言编写的。您正在使用的jar文件只是进入该C世界的窗口。所以它是一台rube Goldberg机器。你会在真实的工作环境中看到各种各样的东西,所以要注意,你在这里接受教育。

答案 2 :(得分:5)

尝试通过执行此操作来加载库:

 System.loadLibrary("opencv_java244")

或者通过这样做:

 System.loadLibrary("opencv_java244")

没有用 - 仍然有同样的错误。

最后有效的是提供dylib文件的完整路径并使用:

System.load(new File("/usr/local/Cellar/opencv/2.4.10.1/share/OpenCV/java/libopencv_java2410.dylib").getAbsolutePath());'

我正在使用HomeBrew但是你安装它只是找到文件并修改路径。

答案 3 :(得分:3)

我找到解决方案。实际的dll位于openCV\opencv\build\java\x64\文件夹中。在我的情况下,它的名字是 opencv_java247.dll ,所以我改变了java代码行

System.loadLibrary("opencv_java244") 

System.loadLibrary("opencv_java247") 

我还在构建路径中将本机库位置设置为E:/Sagar_tools/tools/openCV/opencv/build/java/x64(dll的完整路径)。

答案 4 :(得分:0)

函数loadlibrary尝试在PATH变量中查找DLL的名称 - 检查DLL名称。您也可以尝试System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

答案 5 :(得分:0)

在这种情况下,您应该将jvm的路径指定为opencv dll文件所在的位置:-Djava.library.path =&#34; C:\ opencv \ build \ java \ x64&#34; 并将代码添加为:  的System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 至于,我在我的netbeans ide中尝试这个,我的问题就解决了。