线程“main”java.lang.UnsatisfiedLinkError 中的异常:org.opencv.imgcodecs.Imgcodecs.imread_1(Ljava/lang/String;)J

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.imgcodecs.Imgcodecs.imread_1(Ljava/lang/String;)J

提问人:Asif khAn 提问时间:11/17/2023 最后编辑:Christoph RackwitzAsif khAn 更新时间:11/17/2023 访问量:39

问:

我是openCV的新手,我想在Intellij IDEA(Scala)中使用openCV来检测图像模糊。

我正在使用库依赖 openpnp-opencv

以下是版本详细信息。

Ubuntu 版本 22.04.3 LTS

Scala 版本 12.13.1

SBT 版本 1.9.6

这是我的build.sbt

ThisBuild / version := "0.1.0-SNAPSHOT"
ThisBuild / scalaVersion := "2.13.4"
lazy val root = (project in file("."))
  .settings(
    name := "FaceRecognitionAndComparison"
  )
libraryDependencies ++= Seq("org.openpnp" % "opencv" % "4.5.1-1")

这是我的 FaceRecognition.scala

import org.opencv.core.{Core, CvType, Mat, MatOfDouble}
import org.opencv.imgcodecs.Imgcodecs
import org.opencv.imgproc.Imgproc

object FaceRecognition extends App {

  def isImageBlurry(imagePath: String): Boolean = {
    val image: Mat = Imgcodecs.imread(imagePath)

    val grayImage: Mat = new Mat()
    Imgproc.cvtColor(image, grayImage, Imgproc.COLOR_BGR2GRAY)

    val laplacian: Mat = new Mat()
    Imgproc.Laplacian(grayImage, laplacian, CvType.CV_64F)

    println(laplacian)

    val meanStdDevResult: MatOfDouble = new MatOfDouble()

    val stdDev: Double = meanStdDevResult.toArray()(1)

    val threshold: Double = 100.0

    stdDev < threshold
  }

  System.loadLibrary(Core.NATIVE_LIBRARY_NAME)

  val imagePath = "/home/Pictures/Screenshots/Screenshot.png"

  if (isImageBlurry(imagePath)) {
    println("The image is blurry.")
  } else {
    println("The image is not blurry.")
  }
}

不幸的是,构建出现错误

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.imgcodecs.Imgcodecs.imread_1(Ljava/lang/String;)J
    at org.opencv.imgcodecs.Imgcodecs.imread_1(Native Method)
    at org.opencv.imgcodecs.Imgcodecs.imread(Imgcodecs.java:320)
    at FaceRecognition$.isImageBlurry(FaceRecognition.scala:65)

我尝试过从它的官方网站下载并安装 openCV,这是 https://docs.opencv.org/4.x/d7/d9f/tutorial_linux_install.html

之后,我在代码中添加了以下行来加载 jar 文件,但这并没有解决我的问题System.load("/home/build/bin/opencv-480.jar")

然后我在项目模块中添加了jar文件(文件->项目结构->模块->点击加号->添加opencv-480.jar->应用->确定),这次我得到了一个错误,这是

Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java470 in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
    at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2662)
    at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:827)
    at java.base/java.lang.System.loadLibrary(System.java:1871)
    at FaceRecognition$.delayedEndpoint$FaceRecognition$1(FaceRecognition.scala:83)

指导我如何解决此错误并在 (Intellij IDEA) scala 中实现 openCV。

java scala opencv intellij-idea unsatisfiedlinkerror

评论

1赞 Mikhail Ionkin 11/19/2023
你为什么使用?您应该添加 sbt 依赖项或将 lib 添加到项目文件夹中的 lib 目录,stackoverflow.com/questions/7733028/...System.load("/home/build/bin/opencv-480.jar")
1赞 Jacky Liu - JetBrains 11/22/2023
你可以看看这个文件: github.com/bytedeco/javacv-examples/blob/master/OpenCV_Cookbook/...例外不是关于 Java,而是他们找不到一些原生库(用 C/C++ 编写),比如 opencv_java470.so 等,它会将它们置于操作系统的 PATH 环境下。您应该让 SBT 安装整个依赖项。

答: 暂无答案