在OpenCV 3.2中构造新的Mat
实例时,程序将抛出UnsatisfiedLinkError
。直接调用Mat
构造函数时以及调用Imgcodecs.imread
时都会发生这种情况,这又在以下行中引发错误:
Mat mats_mat = Converters.vector_Mat_to_Mat(mats);
该程序正在运行最新版本的macOS Sierra(10.12.3)的Mac上运行,并且所有可用的
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();
最佳答案
在我的机器上打印出Core.NATIVE_LIBRARY_NAME
(带有Java和Python端口的Ubuntu 16.04 w /带有OpenCV 3.2的)可以为我提供以下信息:
opencv_java320
在我看来,
System.load
需要完整的路径,而Core.NATIVE_LIBRARY_NAME
仅给出部分名称,甚至不包括扩展名! OpenCV Java的默认二进制文件路径位于/usr/local/share/OpenCV/java
。 (至少对于我或在编译时使用默认设置的用户而言),您可以在其中找到libopencv_java320.so
库,它是您需要链接的实际,正确的本机库!关于java - 为什么使用Mat时OpenCV会引发UnsatisfiedLinkError?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42192363/