哪个 Java API 与 JavaCV 一起使用?org.bytedeco.opencv.opencv_core 还是 org.opencv.core?

ang*_*era 6 java opencv javacv

我正在 Java 中使用 OpenCV(实际上是在 Scala 中)。我正在使用 org.bytedeco 包装器(opencpp 和 javacv),但文档不是很好。

问题是,根据示例,使用两个不同的 API:org.bytedeco.opencv.opencv_core或org.opencv.core

org.bytedeco.opencv.opencv_core工作正常,但org.opencv.core抛出 java.lang.UnsatisfiedLinkError:

An exception or error caused a run to abort: no opencv_java410 in java.library.path 
java.lang.UnsatisfiedLinkError: no opencv_java410 in java.library.path
Run Code Online (Sandbox Code Playgroud)

我完全迷失了:

  1. 为什么有两个不同的 api?
  2. 该使用哪一个呢?
  3. 为什么org.bytedeco.opencv.opencv_core工作时org.opencv.core会抛出异常?

提前致谢。

使用的库: "org.bytedeco" % "javacv-platform" % "1.5.1" 为所有平台导入 lib。

Ste*_*n C 3

我完全迷失了:

和库是 Java桥接org.bytedeco.opencv.opencv_core库,允许调用 OpenCV 本机库。 Java 库是从 OpenCV 库的 C/C++ 头文件生成的。例如,bytedeco.org网站表明他们的版本使用JavaCPP工具。org.opencv.core

  1. 为什么有两个不同的 api?

因为有两个小组决定这样做!显然,生成 Java 代码的工作量并不大。

为什么两个小组决定做同样的事情?经过。

该使用哪一个呢?

寻求建议的问题对于 StackOverflow 来说是偏离主题的,所以我不会给出建议。

一个务实的答案是使用适合你的一个,但你也可以尝试找出另一个不适合你的答案。

您也许应该考虑要使用的 OpenCV API 版本,以及相应供应商是否提供该版本的桥接库。

为什么工作org.opencv.core时会抛出异常?org.bytedeco.opencv.opencv_core

两个版本的库都需要链接到 OpenCV 本机库。org.opencv.core此链接在您的执行平台上不起作用。造成这种情况的可能原因有以下几个:

  1. 其中一个opencv库具有该库的嵌入式副本,而另一个则没有。(查看各个 JAR 文件内的内容,并将它们与此问答中有关如何嵌入本机库的内容进行比较:如何将本机库和 JNI 库捆绑到 JAR 中?)

  2. 或者,两个 JAR 文件都没有嵌入本机库,但您的执行已经安装了适当版本的库。失败的版本正在寻找名为“opencv_java410”的库。