【问题标题】:opencv 3.0.0 java imread_0 undefinedopencv 3.0.0 java imread_0 未定义
【发布时间】:2015-03-02 12:42:59
【问题描述】:

我正在尝试使用 scala 开发一个使用 java opencv 3.0.0-beta 的应用程序。

我收到运行时错误: java.lang.UnsatisfiedLinkError: java.lang.UnsatisfiedLinkError: org.opencv.imgcodecs.Imgcodecs.imread_1(Ljava/lang/String;)J

在研究原因时,我创建了以下简单的应用程序,但表现出类似的行为:

import reflect._

import org.opencv.core.Core
import org.opencv.core.Mat
import org.opencv.core.CvType
import org.opencv.imgcodecs.Imgcodecs

object main extends Application {
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME)

    val what = "something.png"
      val mat = Imgcodecs.imread(what)
      Imgcodecs.imwrite("something_else.png", mat)
}

主要区别在于,如果作为“sbt run”运行,它会按预期执行。如果从上面删除了适当的行,则代码在 REPL 中失败。

我怀疑这个问题与原问题有关,但没有证据。

如果我在这两种情况下查看 JVM 的内存映射,我都加载了预期的库。

如果检查代码,我找不到 org.opencv.imgcodecs.Imgcodecs.imread_1 的定义

我不知道下一步该去哪里诊断这个问题。

有人遇到过这个问题吗?

谢谢

【问题讨论】:

  • 你试过了吗:String what = "something.png"; Mat mat = Imgcodecs.imread(what);而不是使用“val”类型?
  • 谢谢哈当。不,我没有。我只是没有想到用java编写它。大部分真正的应用程序是 scala。

标签: scala opencv unsatisfiedlinkerror


【解决方案1】:

我还没有使用过openCV3.0,因为它有很大的变化并且破坏了opencv 2.4.x 代码,你是否提供了库路径到

sbt run

添加

javaOptions in run += "-Djava.library.path=lib/opencv/"

到您的 build.sbt 文件或传递 cmd 行

sbt run -Djava.library.path=lib/opencv/

opencv 文件夹应该包含与 jar 文件一起生成的文件

如果你需要的话,我在这个 git repo 中有用于 2.4.9 、 2.4.10 和 3.0.0 的 java bindins 用于 java 7 和 8

git@gitlab.com:opencv/java_lib.git

【讨论】:

  • 感谢 DAR。这似乎不是我的问题,因为当我查看流程图 (cat /proc/{pid}/maps) 时库就存在了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 2016-01-01
  • 1970-01-01
  • 2016-03-17
  • 2014-08-21
  • 1970-01-01
相关资源
最近更新 更多