JavaCV с java.lang.UnsatisfiedLinkError - PullRequest
0 голосов
/ 09 июля 2019

Код очень прост, просто откройте картинку.Но когда я запускаю это, у меня появляется ошибка, подобная этой:

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:112)

В соответствии с найденным решением, я добавляю это System.load(Core.NATIVE_LIBRARY_NAME) к main(), не работает:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Expecting an absolute path of the library: opencv_java401
    at java.lang.Runtime.load0(Runtime.java:806)
    at java.lang.System.load(System.java:1086)

Или это System.loadLibrary(Core.NATIVE_LIBRARY_NAME), все еще не работает:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1122)

Мой проект построен на gradle, зависимости (официальный документ):

compile group: 'org.bytedeco', name: 'javacv-platform', version: '1.5'

Спасибо за вашпомощь.

1 Ответ

0 голосов
/ 10 июля 2019

Самостоятельный ответ.
Мой import не так. Это должно быть
import static org.bytedeco.opencv.global.opencv_imgcodecs.imread
вместо
import static org.opencv.imgcodecs.Imgcodecs.imread
Эта ошибка привела к неправильному использованию пакета.

Правильный код:

import org.bytedeco.opencv.opencv_core.Mat;
import static org.bytedeco.opencv.global.opencv_imgcodecs.imread;

public class DemoApplication {
    public static void main(String[] args) {
        Mat image = imread("/root/test.png");
        System.out.println("width:" + image.cols());
        System.out.println("height:" + image.rows());
    }
}
...