在 Linux 中加载 OpenCV 库?

The*_*des 5 java linux opencv

所以我在windows上建立了一个视觉库,并且在Windows上运行它并且运行得很好。我使用了命令:

java -jar LiftTracker.jar
Run Code Online (Sandbox Code Playgroud)

我将在 Windows 上构建的 .jar 文件传输到 Raspberry Pi,并执行 make install 来安装 opencv 库。一旦我这样做了,我尝试执行与上面相同的命令并出现错误:

java.lang.UnsatisfiedLinkError: no opencv_java310 in java.library.path.
Run Code Online (Sandbox Code Playgroud)

我做了一些研究,发现我可以与 -jar 命令一起运行此命令

java -Djava.library.path=/path/to/dir
Run Code Online (Sandbox Code Playgroud)

那还是不行。这是我导入系统库的方式吗?我在代码中导入它的方式是:

static{ 

    System.loadLibrary("opencv_java310");

}
Run Code Online (Sandbox Code Playgroud)

我认为它不起作用的主要原因是我安装 opencv 的方式。有任何想法吗?

谢谢!

Dar*_*iak 3

您需要将“libopencv_java320.so”添加到您的java项目库中。它是大约 1mb 的附加库。

  1. 您可以根据文档从源生成此 .so 文件:https://opencv-java-tutorials.readthedocs.io/en/latest/01-installing-opencv-for-java.html#install-opencv-3-x -linux下

  2. 另一种方法是使用终端 cmake 手动构建源代码(它将下载大约 4GB 的 opencv 源代码),应该很简单:从 opencv 下载源代码: http: //opencv.org/releases.html解压它并在解压目录中创建一个/build 目录像这样 ../opencv-3.2.0/build/。确保您已安装 cmake (Debian/Ubuntu apt get install cmake)。在之前创建的 /build 文件夹中打开终端并键入:cmake -DBUILD_SHARED_LIBS=OFF ..操作完成后键入make -j8,然后应为 3.2.0 版本生成“libopencv_java_320” - 将此 .so 复制到您的 java 项目中。最后make install从同一构建目录中键入以在系统上安装 3.2.0 库(如果需要,您可能需要事先删除旧版本)。更多信息在这里: https: //elbauldelprogramador.com/en/compile-opencv-3.2-with-java-intellij-idea/

  3. 与上述方法相同,但使用此脚本可以实现自动化: https: //github.com/milq/milq/blob/master/scripts/bash/install-opencv.sh脚本也会在 Linux 系统上安装 opencv。从这个来源获取它:http://milq.github.io/install-opencv-ubuntu-debian/它比第二种方法做得更多,应该是最容易制作的。

在系统中安装 opencv 库并将 libopencv_java320.so 复制到您的 java 项目中后,您可以删除源(毕竟它几乎是 4GB)。

然后,您可以在main方法中使用以下代码来加载 windows .dll(如果您之前也添加过)和 linux .so:

String libName = "";
if (SystemUtils.IS_OS_WINDOWS) {
    libName = "opencv_java320.dll";
} else if (SystemUtils.IS_OS_LINUX) {
    libName = "libopencv_java320.so";
}
System.load(new File("./libs/".concat(libName)).getAbsolutePath());
Run Code Online (Sandbox Code Playgroud)