10

我正在使用 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 项目。

  • 所以我已经从 OpenCV-2.4.2.exe 文件中提取 javacv 到 C:\
  • 然后执行“cmake -G”MinGW Makefiles“-DBUILD_opencv_java=ON C:\opencv”命令,然后执行“mingw32-make”。一切都是在没有错误或警告的情况下构建的
  • 在我将 opencv dll 添加到我的环境变量之后
4

6 回答 6

6

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

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

要解决此错误

  1. 如果您使用的是 opencv 版本< opencv 2.4.6,那么@user3033420 给出的答案就是解决方案。
  2. 如果您使用的是 version >= opencv 2.4.6,则 jar 在Core 类中有一个名为NATIVE_LIBRARY_NAME的常量变量,您将其提供给loadLibrary()FaceDetector 类中的函数以在项目中包含 opencv 的功能,您可能已经有了这个:

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    

使用上面的命名常量,就不需要记住 strang dll 文件的名称了。

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

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

您将看到如下对话框。添加 opencv-2.4.9 作为库名称并单击确定。

创建新用户库

然后Add External Jar&找到你的opencv jar&点击确定。然后展开 opencv-2.4.9.jar 并单击Native Library Location (None),如下所示:

添加 OpenCV 的本地库位置

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

本机库文件夹配置

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

于 2014-08-04T12:52:32.993 回答
5

如果您收到此错误:

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

这可能意味着您正在从臀部拍摄,通过布朗运动进行编程,试图让 openCV 工作。就像试图通过疯狂地按下所有按钮来弄清楚飞机在飞行中是如何工作的。你会过得很糟糕。

错误的含义:

Eclipse 告诉您该 jar 文件找不到完成其工作所需的库。所以很自然,除非你让它们可用,否则它不会起作用。您必须在您的特定平台上找到有关“如何从源代码构建 openCV”的教程:(windows、mac、linux 等)、(32 位、64 位等)。

基本上,您忽略了“本机库位置”设置,或者没有正确设置它们,因此 jar 无法找到以C.

如何解决它,千英尺视图:

  1. 为您的操作系统下载 openCV 的源代码。
  2. 按照说明从源代码构建 openCV。
  3. 将 jar 复制到 Java 项目的 lib 目录中。
  4. 通过将“本机库位置”设置为build/lib从源代码构建 openCV 的路径下的目录,配置 jar 以查找其本机库。
  5. 清理构建 java 项目,并且 UnsatisfiedLinkError 应该消失。

此博客分步详细讨论上述步骤:https ://udallascs.wordpress.com/2014/03/30/adding-opencv-and-configuring-to-work-with-eclipse-and-java /

为什么这不能只是一个简单的罐子?

因为大部分 openCV 都是用C编程语言编写的。您使用的 jar 文件只是进入 C 世界的一个窗口。所以这是一个 rube Goldberg 机器。你会在真实的工作世界中到处看到这类事情,所以要注意,你在这里接受教育。

于 2015-03-17T00:57:50.317 回答
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,但是您安装它只是找到文件并更新路径。

于 2015-05-04T15:12:09.193 回答
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 的完整路径)。

于 2013-11-25T17:46:02.020 回答
0

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

于 2016-01-29T23:34:30.520 回答
0

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

于 2017-08-11T12:40:15.497 回答