JAVA开发openCV首次加载报错:java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_eye(III)J

在官网下载了最新版本,但是在eclipse中配置环境后发生以下错误
Exception in thread “main” java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_eye(III)J
at org.opencv.core.Mat.n_eye(Native Method)
at org.opencv.core.Mat.eye(Mat.java:402)
at HelloCV.main(HelloCV.java:8)
首次运行代码如下

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;

public class HelloCV {
public static void main(String[] args) {
	//下面第一行,这行是加载类库
	System.out.println(Core.NATIVE_LIBRARY_NAME);
	Mat mat = Mat.eye(3, 3,CvType.CV_8UC1);
	System.out.println("mat = "+mat.dump());
}
}

如果运行成功应该是一个3*3的矩阵
JAVA开发openCV首次加载报错:java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_eye(III)J_第1张图片
这个错误主要由于没有加载openCV的java类库,因为在代码中:System.out.println(Core.NATIVE_LIBRARY_NAME);
没有被首先执行,导致没有加载好类库就运行结束了

解决方法如下:

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;

public class HelloCV {
	static {
		System.loadLibrary(Core.NATIVE_LIBRARY_NAME); // 得保证先执行该语句,用于加载库,才能调用其他操作库的语句,
	}
public static void main(String[] args) {
	//System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
	Mat mat = Mat.eye(3, 3,CvType.CV_8UC1);
	System.out.println("mat = "+mat.dump());
}
}

将这条语句放在类里,在这个类里加载程序,首先会加载库,这样加载过一次,再把代码改回再开始的代码也可以完美运行了:


static {
		System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 
		// 得保证先执行该语句,用于加载库,才能调用其他操作库的语句,
	}

你可能感兴趣的:(JAVA开发openCV首次加载报错:java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_eye(III)J)