2017-02-12 4 views
1

Beim Erstellen einer neuen Instanz in OpenCV 3.2, wirft das Programm eine UnsatisfiedLinkError. Dies geschieht sowohl beim Aufruf des Mat Konstruktor direkt, als auch bei Imgcodecs.imread Aufruf, die wiederum einen Fehler in der folgenden Zeile wirft:Warum wirft OpenCV bei der Verwendung von Mat einen UnbefriedigtenLinkError?

Mat mats_mat = Converters.vector_Mat_to_Mat(mats); 

Das Programm auf einem Mac laufen wird, um die neueste Version von macOS Sierra läuft (10.12.3), und alle verfügbaren dylib Dateien befinden sich im Verzeichnis java.library.path. Es wurde bestätigt, dass die gelesene Datei existiert. Die Stapelüberwachung liest (teilweise) wie folgt:

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

Die dylib Dateien werden mit dem folgenden Code in main ohne Fehler oder Warnungen geladen:

System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 
System.loadLibrary("opencv_imgproc.3.2.0"); 
System.loadLibrary("opencv_imgcodecs.3.2"); 
System.loadLibrary("opencv_videoio.3.2"); 
System.loadLibrary("opencv_highgui.3.2.0"); 
System.loadLibrary("opencv_flann.3.2"); 
System.loadLibrary("opencv_ml.3.2"); 
System.loadLibrary("opencv_features2d.3.2"); 
System.loadLibrary("opencv_calib3d.3.2"); 
System.loadLibrary("opencv_objdetect.3.2"); 
System.loadLibrary("opencv_photo.3.2"); 
System.loadLibrary("opencv_stitching.3.2"); 
System.loadLibrary("opencv_video.3.2.0"); 
System.loadLibrary("opencv_superres.3.2"); 
System.loadLibrary("opencv_shape.3.2"); 
System.loadLibrary("opencv_videostab.3.2"); 

der Fehler ausgelöst wird, wenn jede der darstellen folgende Aktionen:

this(Imgcodecs.imread(filePath)); 

Mat mat = new Mat(); 

MatOfPoint matOfPoint = new MatOfPoint(); 

Antwort

0

Druck aus Core.NATIVE_LIBRARY_NAME auf meinem Rechner (Ubuntu 16.04 w/OpenCV 3.2 mit Java und Python-Ports) gibt mir dies:

opencv_java320 

Es scheint mir, dass System.load einen vollständigen Pfad erfordert während Core.NATIVE_LIBRARY_NAME gibt nur einen Teil des Namens, nicht einmal einschließlich der Erweiterung! OpenCV Java hat seinen Standardpfad für Binärdateien unter /usr/local/share/OpenCV/java. (Zumindest für mich oder Leute, die die Standardeinstellungen beim Kompilieren verwendet haben) gibt es dort die Bibliothek libopencv_java320.so, die die eigentliche, korrekte native Bibliothek ist, zu der Sie verlinken müssen!