为什么OpenCV在使用Mat时会抛出UnsatisfiedLinkError?

时间:2017-02-12 19:43:54

标签: java opencv image-processing computer-vision opencv3.0

在OpenCV 3.2中构建新的Mat实例时,程序会抛出UnsatisfiedLinkError。在直接调用Mat构造函数时以及调用Imgcodecs.imread时都会发生这种情况,而Mat mats_mat = Converters.vector_Mat_to_Mat(mats); 会在以下行中引发错误:

dylib

该程序在运行最新版macOS Sierra(10.12.3)的Mac上运行,所有可用的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();

执行以下任何操作时抛出错误:

{{1}}

1 个答案:

答案 0 :(得分:0)

在我的机器上打印'//a[contains(text(), "'+character+'")]/@href' (带有Java和Python端口的Ubuntu 16.04 w / OpenCV 3.2)给了我这个:

Core.NATIVE_LIBRARY_NAME

在我看来,opencv_java320 需要一条完整的路径,而System.load只提供部分名称,甚至不包括扩展名! OpenCV Java的默认二进制文件路径位于Core.NATIVE_LIBRARY_NAME。 (至少对于我或编译时使用默认设置的人),您可以找到库/usr/local/share/OpenCV/java,这是您需要链接到的实际,正确的本机库!