Opencv Javaexception

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

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.(Highgui.java:416) at teste.main(teste.java:21) 

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

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

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

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

要解决此错误

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

     System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 

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

opencv 2.4.9.jar从项目首选项添加到构建路径,如下所示:

 Window -> Preferences -> Java Build Path –> 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程序,一切都应该按照设计编译和运行。

如果您收到此错误:

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

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

错误意味着什么:

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

基本上,你掩盖了“本机库位置”设置,或者没有正确设置它们,因此jar无法找到用C编写的支持库。

如何解决它,千尺观看:

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

本博客分步讲述了上述步骤: https : //udallascs.wordpress.com/2014/03/30/adding-opencv-and-configuring-to-work-with-eclipse-and-java /

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

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

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

  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但是你安装它只是找到文件和uddate路径。

我找到了解决方案 实际的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的完整路径)。

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

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