在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]
我的设置:
在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;
}
}
答案 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。