我目前正尝试在Kotlin中使用JavaCV启动项目。我使用IntelliJ Idea作为我的IDE。我使用的是JavaCV 1.3.2和OpenCV 3.20。 这是我对模块的OpenCV依赖性的设置:
和JavaCV:
我在依赖项中的javacv之前有opencv。 为了测试OpenCV是否存在且有效,我编写了以下内容进行测试。因为我可以loadLibrary并且版本号正确显示我可以假设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存储库中的README.md提供的说明进行操作。我还没有看到其他人试图在StackOverflow上使用这个库与Kotlin,虽然已经检查了一些关于使用java引发的同一异常的帖子。
答案 0 :(得分:0)
处理此错误在Kotlin和Java中没有什么不同;您需要为opencv指定本机库的路径。默认情况下,它会在Windows上查找PATH环境变量中设置的本机库。
您还可以通过指定系统属性java.library.path
(由错误消息指示)显式指定要查找本机库的目录。
${PATH_TO_DYNAMIC_LIB}
哪里是本地lib opencv_imgproc320.dll
的位置 - 我认为在你的情况下它将是C:/Users/ms/IdeaProjects/CVTest/opencv/build/java/x64
。
答案 1 :(得分:0)
我能够通过将我的VM选项留空并在我的JavaCV库配置中添加所有必需的OpenCV库作为本机库路径来解决此问题。
答案 2 :(得分:0)
在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
...
这导致我进入this StackOverflow question on nu.pattern,它展示了如何在代码中使用nu.pattern。
static {
nu.pattern.OpenCV.loadShared();
System.loadLibrary(org.opencv.core.Core.NATIVE_LIBRARY_NAME);
}
此序言代码启用了以前无法运行的示例应用程序。