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

Which Java API to use with JavaCV? org.bytedeco.opencv.opencv_core or org.opencv.core?

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

问题是,根据示例,使用了两个不同的 API:org.bytedeco.opencv.opencv_coreorg.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

我完全迷路了:

  1. 为什么有两个不同的 API?
  2. 用哪个好?
  3. 为什么 org.opencv.coreorg.bytedeco.opencv.opencv_core 工作时抛出异常?

提前致谢。

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

I'm completely lost:

org.bytedeco.opencv.opencv_coreorg.opencv.core库是Javabridge库,允许调用OpenCV原生库
Java 库是从 OpenCV 库的 C/C++ 头文件生成的。例如,bytedeco.org site that their version using the JavaCPP 工具。

  1. Why two different apis?

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

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

Which one is the one to use?

要求推荐的问题对于 Whosebug 来说是题外话,所以我不会给出。

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

您或许应该考虑您要使用的 OpenCV API 版本,以及该版本的桥接库是否可从各个供应商处获得。

Why org.opencv.core throws exception when org.bytedeco.opencv.opencv_core is working?

两个版本的库都需要 link 到 OpenCV 本机库。这 linking 不适用于您的执行平台上的 org.opencv.core。这有几个可能的原因:

  1. 其中一个 opencv 库具有该库的嵌入式副本,而另一个则没有。 (查看各个 JAR 文件中的内容,并将它们与此问答中关于如何嵌入本机库的内容进行比较:How to bundle a native library and a JNI library inside a JAR?

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