2017-02-12 116 views
1

當在OpenCV 3.2中構建一個新的Mat實例時,程序將拋出一個UnsatisfiedLinkError。這種情況既直接調用時Mat構造,以及調用Imgcodecs.imread,這反過來以下行引發錯誤時:爲什麼OpenCV在使用Mat時拋出一個UnsatisfiedLinkError?

Mat mats_mat = Converters.vector_Mat_to_Mat(mats); 

程序正在在Mac上運行的是最新版本的MacOS塞拉利昂的(10.12.3),並且所有可用的dylib文件位於java.library.path目錄中。正在讀取的文件已被確認存在。堆棧跟蹤讀取(部分),如下所示:

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) 

dylib文件使用以下代碼加載main與沒有錯誤或警告:

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"); 

執行任何時引發錯誤以下操作:

this(Imgcodecs.imread(filePath)); 

Mat mat = new Mat(); 

MatOfPoint matOfPoint = new MatOfPoint(); 

回答

0

打印出來Core.NATIVE_LIBRARY_NAME我的機器上(Ubuntu的16.04瓦特/ OpenCV的3.2 Java和Python端口)給出我:

opencv_java320 

在我看來,這System.load需要一個完整的路徑,而Core.NATIVE_LIBRARY_NAME只給部分名稱,即使不包括擴展! OpenCV Java的缺省二進制文件路徑位於/usr/local/share/OpenCV/java。 (至少對於編譯時使用默認設置的我或者人),您可以找到庫libopencv_java320.so,這是您需要鏈接的實際正確的本地庫!

相關問題