Eclipse中的OpenCV Java绑定链接错误

时间:2018-08-12 19:21:40

标签: java eclipse maven opencv

在Eclipse(Java10,MacOS Sierra)中使用java + opencv运行我的项目时,出现以下错误:

java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_Mat()J
at org.opencv.core.Mat.n_Mat(Native Method) ~[opencv-342.jar:unknown]
at org.opencv.core.Mat.<init>(Mat.java:26) ~[opencv-342.jar:unknown]
at org.opencv.core.MatOfByte.<init>(MatOfByte.java:12) ~[opencv-342.jar:unknown]
at de.mbs.docscanner.scan.PrepareImageService.prepare(PrepareImageService.java:39) ~[classes/:na]

我的设置:

  1. 使用Homebrew从源代码构建OpenCV以启用Java绑定
  2. 使用mvn install插件将生成的jar放入我的本地Maven存储库中
  3. 设置Spring Boot项目并添加“ my” opencv版本作为maven依赖项
  4. 在Eclipse中导入maven项目
  5. 在“运行/调试”设置中将java.library.path设置为/usr/local/Cellar/opencv/3.4.2/share/OpenCV/java

在cmdline上进行Maven构建并使用

运行项目
java -Djava.library.path=/usr/local/Cellar/opencv/3.4.2/share/OpenCV/java -jar target/docscanner-0.0.1-SNAPSHOT.jar

可以正常工作,仅在从Eclipse运行时才会出现问题。 Spring Boot应用程序启动没有问题(基于Tomcat的Web应用程序),执行以下代码时出现错误。

代码部分:

@Service
public class PrepareImageService {

    static {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    }

    public ScanResult prepare(InputStream input, MediaType mediaType) throws IOException {

        ScanResult scanResult = new ScanResult();
        scanResult.setContentType(mediaType);
        scanResult.getImages().put(IMG_TYPE.ORIGINAL, StreamUtils.copyToByteArray(input));
        MatOfByte inputBuffer = new MatOfByte(scanResult.getImages().get(IMG_TYPE.ORIGINAL));
        Mat orig = Imgcodecs.imdecode(inputBuffer,    Imgcodecs.CV_LOAD_IMAGE_UNCHANGED);
        // ... skipped
        return scanResult;
    }
}

1 个答案:

答案 0 :(得分:0)

运行本机库时,需要配置库的位置。在这种情况下,您需要使用Java包装器(jar和dylib)以及opencv库。

-Djava.library.path=/usr/local/Cellar/opencv/4.1.1_2/share/java/opencv4:/usr/local/Cellar/opencv/4.1.1_2/lib

取决于opencv的安装方式,路径可能不同。但是您需要两个文件夹:java shared lib和opencv lib。

相关问题