代码非常简单,只需打开一张图片即可。 但是当我运行此程序时,我会遇到如下错误:
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:112)
根据搜索到的解决方案,我将此System.load(Core.NATIVE_LIBRARY_NAME)
添加到main()
,不起作用:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Expecting an absolute path of the library: opencv_java401
at java.lang.Runtime.load0(Runtime.java:806)
at java.lang.System.load(System.java:1086)
或者这个System.loadLibrary(Core.NATIVE_LIBRARY_NAME)
仍然无法正常工作:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
我的项目是通过gradle构建的,依赖项是(官方文档):
compile group: 'org.bytedeco', name: 'javacv-platform', version: '1.5'
谢谢您的帮助。
答案 0 :(得分:0)
自我回答。
我的import
是错误的。应该是
import static org.bytedeco.opencv.global.opencv_imgcodecs.imread
代替
import static org.opencv.imgcodecs.Imgcodecs.imread
此错误导致使用了错误的软件包。
正确的代码是:
import org.bytedeco.opencv.opencv_core.Mat;
import static org.bytedeco.opencv.global.opencv_imgcodecs.imread;
public class DemoApplication {
public static void main(String[] args) {
Mat image = imread("/root/test.png");
System.out.println("width:" + image.cols());
System.out.println("height:" + image.rows());
}
}