Подтвердить что ты не робот

OpenCV + Java = UnsatisfiedLinkError

Мне нужно захватить поток видео с моей веб-камеры USB, для этого я использую Opencv 2.4.6 для разработки на Java. Я следую шагам, перечисленным в здесь

Я добавляю директорию "C:\opencv\build\java\x64" в свой системный PATH и включаю файл "opencv-246.jar" в свои библиотеки на ECLIPSE. Когда y запустите explicate

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;

public class Main {
    public static void main(String[] args) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        Mat m  = Mat.eye(3, 3, CvType.CV_8UC1);
        System.out.println("m = " + m.dump());
    }
}

я получаю

m = [1, 0, 0;
  0, 1, 0;
  0, 0, 1]

OK =)

но когда я запустил

import org.opencv.highgui.VideoCapture;

public class Main {
    public static void main(String[] args) {
        VideoCapture vc = new VideoCapture(0);
        if(vc.isOpened()){
            System.out.println("Works!");
        }
    }
}

я получаю

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.highgui.VideoCapture.n_VideoCapture(I)J
    at org.opencv.highgui.VideoCapture.n_VideoCapture(Native Method)
    at org.opencv.highgui.VideoCapture.<init>(VideoCapture.java:113)
    at Main.main(Main.java:5)

i добавить все маршруты в:

C:\OpenCV\построить\x64\VC10

один за другим, но не работает.

Наконец, я создаю переменную OPENCV_DIR с C:\opencv\build\x64\vc10, но все равно получаю UnsatisfiedLinkError.

ПОЖАЛУЙСТА, ПОМОГИТЕ МНЕ!

4b9b3361

Ответ 1

во втором примере вы пропустили эту строку

 System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

так что opencv libs werent загружен, UnsatisfiedLinkError и т.д.

[править]:

благодаря @Jishnu Prathap для выделения проблемы пути java.library, если вы столкнулись с настройками проблемы, вы все равно можете попытаться использовать абсолютный путь к java-обертке so/dll/dylib, например:

 System.load("/path to/our/java_wrapper");

Ответ 2

У меня была аналогичная ошибка при использовании OpenCV с java.Я сделал 2 вещи, чтобы решить эту проблему.

  • static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }
  • Я добавил путь к DLL OpenCV или .so к javalibpath или пути. который на самом деле не работал по какой-то причине, и я закончил размещение DLL OpenCV в папке system32.

Ответ 3

Для обычных пользователей, использующих opencv3.x:

Модуль HighGUI больше не существует в Java для opencv 3.0 и выше.

import org.opencv.videoio.VideoCapture;

вместо

import org.opencv.highgui.VideoCapture;

videoio включает VideoCapture, VideoWriter.

Аналогично:

imgcodecs включает imread/imwrite и друзей

Пример:

Highgui.imread(fileName)

- >

 Imgcodecs.imread(fileName)

Ответ 4

Итак, у меня тоже была эта проблема, и я сделал то, что вы все предлагали, она отлично работала в моих x64-окнах, но в x86 не удалось заставить ее работать.

Наконец, я нашел решение, изменив:

VideoCapture capture = new VideoCapture(0);

для

    VideoCapture capture = new VideoCapture();
    capture.open("resources/vid.MP4");

Я не знаю, почему это сработало, но я надеюсь, что это может помочь кому-то с моей же проблемой.