提问者:小点点

将JavaCV与Kotlin一起使用


我目前正试图在Kotlin中使用JavaCV启动一个项目。我使用IntelliJ Idea作为我的IDE。我使用的是JavaCV 1.3。2和OpenCV 3.20。这是我对OpenCV模块依赖项的设置:

对于JavaCV:

在附件中,我在javacv之前有opencv。为了测试OpenCV是否存在和有效,我编写了以下代码进行测试。由于我可以加载库,并且版本号显示正确,我可以假设OpenCV实际上正在工作。

import org.opencv.core.Core
import org.opencv.core.Mat
import org.opencv.core.CvType
import org.opencv.core.Scalar
import org.bytedeco.javacv.OpenCVFrameGrabber

fun main(args : Array<String>) {
    println("Test Built Successfully")
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME)
    println("Running OpenCV Version ${Core.VERSION}")
    val grabber = OpenCVFrameGrabber(1)
}

初始化抓取器的行出现以下异常:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no jniopencv_core in java.library.path
Caused by: java.lang.UnsatisfiedLinkError: no opencv_imgproc320 in java.library.path

也许我在这里遗漏了什么,但我遵循了自述文件提供的说明。JavaCV的Git存储库中的md。我还没有看到其他人试图在StackOverflow上使用这个库和Kotlin,不过我已经查看了一些关于使用java引发相同异常的帖子。


共3个答案

匿名用户

在静态编程语言中处理此错误与Java没有什么不同;您需要为opencv指定本机库的路径。默认情况下,在Windows上,它将在PATH环境变量中设置的任何内容中查找本机库。

您还可以通过指定系统属性java显式指定查找本机库的目录。图书馆路径(如错误消息所示)。

其中${PATH_TO_DYNAMIC_LIB}将是本机libopencv_imgproc320.dll所在的位置-我认为在您的情况下,它将是C:/用户/ms/ideaProjects/CVTest/opencv/build/java/x64

匿名用户

我可以通过将VM选项留空并在JavaCV库配置中添加所有必要的OpenCV库作为本机库路径来解决这个问题。

匿名用户

在MacOS上,您不需要安装本机库。在OpenCV3.41上,如从

<!-- https://mvnrepository.com/artifact/org.openpnp/opencv -->
    <dependency>
      <groupId>org.openpnp</groupId>
      <artifactId>opencv</artifactId>
      <version>3.4.2-1</version>
    </dependency>

我查看了库(jar tf~/.m2/repository/org/openpnp/opencv/3.4.2-1/opencv-3.4.2.-1.jar)并在其中找到了DLL和其他内容:

jar tf *1.jar | grep nu
...
nu/pattern/opencv/osx/
nu/pattern/opencv/osx/x86_64/
nu/pattern/opencv/osx/x86_64/README.md
nu/pattern/opencv/osx/x86_64/cmake.log
nu/pattern/opencv/osx/x86_64/libopencv_java342.dylib
...

这让我想到了这个StackOverflow问题nu.pattern它展示了如何在代码中使用nu.pattern。

static {
    nu.pattern.OpenCV.loadShared();
    System.loadLibrary(org.opencv.core.Core.NATIVE_LIBRARY_NAME);
}

这段开场白代码使以前失败的示例应用程序能够运行。