Opencv Java异常

and*_*riy 10 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)
Run Code Online (Sandbox Code Playgroud)

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

我想在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添加到我的环境变量中

OO7*_*OO7 6

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

Exception in thread "main" 
java.lang.UnsatisfiedLinkError: no opencv_java in java.
Run Code Online (Sandbox Code Playgroud)

要解决此错误:

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

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    
    Run Code Online (Sandbox Code Playgroud)

使用上面提到的常量,不需要记住strang dll文件的名称.

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

Window -> Preferences -> Java Build Path –> Add Library -> User Libraries -> 
User Library -> & click New
Run Code Online (Sandbox Code Playgroud)

您将看到如下对话框.将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程序,一切都应该按照设计编译和运行.


Eri*_*ski 5

如果您收到此错误:

Exception in thread "main" 
java.lang.UnsatisfiedLinkError: no opencv_java in java.library.path
Run Code Online (Sandbox Code Playgroud)

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

错误意味着什么:

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

基本上,你掩盖了"本机库位置"设置,或者没有正确设置它们,因此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机器.你会在真实的工作环境中看到各种各样的东西,所以要注意,你在这里接受教育.


gid*_*dim 5

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

 System.loadLibrary("opencv_java244")
Run Code Online (Sandbox Code Playgroud)

或者通过这样做:

 System.loadLibrary("opencv_java244")
Run Code Online (Sandbox Code Playgroud)

没有工作 - 仍然有同样的错误.

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

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

我正在使用HomeBrew但是你安装它只是找到文件和uddate路径.


小智 3

我找到解决方案。实际的 dll 位于openCV\opencv\build\java\x64\文件夹中。就我而言,它的名称是opencv_java247.dll,所以我更改了 java 代码行

System.loadLibrary("opencv_java244") 
Run Code Online (Sandbox Code Playgroud)

System.loadLibrary("opencv_java247") 
Run Code Online (Sandbox Code Playgroud)

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