java.lang.UnsatisfiedLinkError:org.opencv.core.Mat.n_Mat(IIILjava / nio / ByteBuffer;)J

我正在使用JavaFX和JavaCV进行项目。我在应用程序中的主要功能是基于摄像头捕获的。我正在寻找一种将帧从OpenCVFrameGrabber显示为JavaFX组件的方法。

我找到了一种方法,但是出现以下错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_Mat(IIILjava/nio/ByteBuffer;)J
    at org.opencv.core.Mat.n_Mat(Native Method)
    at org.opencv.core.Mat.<init>(Mat.java:52)
    at org.bytedeco.javacv.OpenCVFrameConverter.convertToOrgOpenCvCoreMat(OpenCVFrameConverter.java:187)
    at org.bytedeco.javacv.OpenCVFrameConverter$ToOrgOpenCvCoreMat.convert(OpenCVFrameConverter.java:61)
    at TestJavaCV$Companion.main(TestJavaCV.kt:20)
    at TestJavaCV.main(TestJavaCV.kt)

我怀疑该应用程序由于非依赖性失败而无法运行。也许我应该为 org.opencv.core 提供其他库,但是我不知道如何在gradle中实现这一目标。

最小的可复制示例:

build.gradle

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    testCompile group: 'junit',name: 'junit',version: '4.12'
    compile group: 'org.bytedeco',name: 'javacv-platform',version: '1.5.3'
}

TestJavaCV.kt

import javafx.scene.image.Image
import org.bytedeco.javacv.Frame
import org.bytedeco.javacv.OpenCVFrameConverter
import org.bytedeco.javacv.OpenCVFrameGrabber
import org.opencv.core.Mat
import org.opencv.core.MatOfByte
import org.opencv.imgcodecs.Imgcodecs
import java.io.ByteArrayInputStream

class TestJavaCV {
    companion object {
        private val toOrgOpenCvCoreMat = OpenCVFrameConverter.ToOrgOpenCvCoreMat()

        @JvmStatic
        fun main(args: Array<String>) {
            val grabber: OpenCVFrameGrabber = OpenCVFrameGrabber(0);
            grabber.start()

            val frame: Frame = grabber.grabFrame()
            val mat: Mat = toOrgOpenCvCoreMat.convert(frame)
            val matOfByte: MatOfByte = MatOfByte()

            Imgcodecs.imencode(".png",mat,matOfByte)
            val image = Image(ByteArrayInputStream(matOfByte.toArray()))
        }
    }
}
iCMS 回答:java.lang.UnsatisfiedLinkError:org.opencv.core.Mat.n_Mat(IIILjava / nio / ByteBuffer;)J

这个问题java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_Mat(III)J?回答了为什么您得到那个UnsatisfiedLinkError; Java VM未加载OpenCV的库,因此无法进行相关的本机调用。

这个问题How to use opencv in using Gradle?应该可以帮助您使用Gradle配置OpenCV。

每个您的评论问题“我要求该应用程序在Windows 10,Linux和MacOS上运行。我不知道如何使用gradle解决该问题,但是在Java中,我会每o / s注入一个不同的系统属性,并在类的静态块中使用它来加载您的库:

static {

    String libraryPath = System.getProperty("opencv.path");

    System.load(libraryPath);

}
本文链接:https://www.f2er.com/1878266.html

大家都在问