【发布时间】:2019-01-19 13:55:54
【问题描述】:
在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]
我的设置:
- 使用 Homebrew 从 Source 构建 OpenCV 以启用 java 绑定
- 将生成的 jar 与 mvn install 插件放在我的本地 maven 存储库中
- 设置 Spring Boot 项目并将“我的”opencv 版本添加为 maven 依赖项
- 在 Eclipse 中导入 maven 项目
- 在运行/调试设置中将 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 app start 显示没有问题(Tomcat based web app),执行下面代码时报错。
代码部分:
@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;
}
}
【问题讨论】:
-
需要你的代码..
-
添加代码sn-p
-
与 maven config fork = true 相同的错误