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.
ПОЖАЛУЙСТА, ПОМОГИТЕ МНЕ!
Ответы
Ответ 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");
Я не знаю, почему это сработало, но я надеюсь, что это может помочь кому-то с моей же проблемой.