前言:最近在自学一些opencv相关的技术,采用windos10环境,整合opencv3.4.1和java。参考学习文献为《opencv与jvm》。
废话不多说,开始整合
下载jdk8和opencv3.4.1
1.jdk8
配置环境变量....
2.opencv3.4.1
一直next就好,安装目录可以自定义。
3.opencv-341.jar
在本地安装目录的{path}\opencv\build\java目录下有个opencv-341.jar
4.编辑器中编写第一个hello-opencv
由于我采用的是junit-test方式:
// 添加 junit 依赖
junit
junit
test
在项目的根目录创建一个lib文件夹,然后导入opencv3.4.1.jar包,并且添加到编译环境。
image.png
代码部分:
static {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
public void test2(){
Mat mat = Mat.eye(3,3, CvType.CV_8UC1);
System.out.println(mat.dump());
}
//结果运行报错
java.lang.UnsatisfiedLinkError: no opencv_java341 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)
......
//解决方案 在vm options中添加运行参数
-Djava.library.path=F:/opencv/3.4.1/in/opencv/build/java/x64;F:/opencv/3.4.1/in/opencv/build/x64/vc14/bin
//运行正常 输出:
[ 1, 0, 0;
0, 1, 0;
0, 0, 1]
5.扩展介绍
Mat对象是opencv中的核心对象,书中把它翻译为matrix(矩阵)。
静态代码块中的loadLibrary……,是告诉jvm加载native-opencv的库。必须的一个步骤
Mat.eye(3,3, CvType.CV_8UC1):尺寸3*3,每个像素类型是8UC1,表示8个位的无符号(8U)单通道(C1)整数。·