共计 4165 个字符,预计需要花费 11 分钟才能阅读完成。
欢送拜访我的 GitHub
https://github.com/zq2599/blog_demos
内容:所有原创文章分类汇总及配套源码,波及 Java、Docker、Kubernetes、DevOPS 等;
本篇概览
- 作为一名 java 程序员,如果想在 Ubuntu16 桌面版上应用 OpenCV4 的服务,能够下载本人所需版本的 OpenCV 源码,而后本人入手编译 java 库和 so 库,这样就能够在 java 程序中应用了
- 本文具体记录 OpenCV4 的下载和编译过程,而后写一个 java 程序验证是否能够胜利调用 OpenCV4 的库,总的来说分为以下几步:
- 装置必要利用
- 配置 java 环境
- 配置 ANT 环境
- 下载源码
- 编译前的配置
- 编译
- 装置
- 验证
- 留神:<font color=”red”> 本文的操作全副以非 root 账号执行 </font>
环境和版本
- 操作系统:16.04.7 LTS(桌面版)
- java:1.8.0_311
- ANT:1.9.16
- OpenCV:4.1.1
- 接下来开始操作,我这里是个新装的污浊版 Ubuntu16
装置利用
- 执行以下命令装置所有利用,如果有个别提醒失败的能够多试几次:
sudo apt-get install -y unzip build-essential curl cmake cmake-gui git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
配置 java 环境
- 下载 JDK8,解压后是名为 <font color=”blue”>jdk1.8.0_311</font> 的文件夹,将该文件夹挪动到这个目录上面:<font color=”red”>/usr/lib/jvm/</font>
- 关上文件 <font color=”blue”>~/.bashrc</font>,增加以下内容:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_311
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
配置 ANT
- 下载 ANT,地址是:https://dlcdn.apache.org//ant…
- 解压后是名为 <font color=”blue”>apache-ant-1.9.16</font> 的文件夹,将该文件夹挪动到这个目录上面:<font color=”red”>/usr/local/</font>
- 关上文件 <font color=”blue”>~/.bashrc</font>,增加以下内容:
export ANT_HOME=/usr/local/apache-ant-1.9.16
export PATH=$ANT_HOME/bin:$PATH
- 执行命令 <font color=”blue”>source ~/.bashrc</font>
- 查看 java 和 ANT 装置是否实现:
will@hp:~$ java -version
java version "1.8.0_311"
Java(TM) SE Runtime Environment (build 1.8.0_311-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.311-b11, mixed mode)
will@hp:~$ ant -version
Apache Ant(TM) version 1.9.16 compiled on July 10 2021
下载源码
- 执行以下命令即可:
curl -fL -o opencv-4.1.1.zip https://codeload.github.com/opencv/opencv/zip/4.1.1; \
unzip opencv-4.1.1.zip; \
rm -rf opencv-4.1.1.zip; \
mkdir opencv-4.1.1/build; \
mkdir opencv-4.1.1/build/install
编译前的配置
- 进入目录 <font color=”blue”>opencv-4.1.1/build/</font>
- 执行 cmake,生成配置信息:
cmake -D CMAKE_BUILD_TYPE=Release -D BUILD_SHARED_LIBS=OFF -D CMAKE_INSTALL_PREFIX=./install ..
- 要留神的是,下面的 <font color=”blue”>-D BUILD_SHARED_LIBS=OFF</font> 参数非常重要!没有该参数时生成的 libopencv_java411.so 大小只有 1532128,有了该参数 libopencv_java411.so 大小是 78169672
- 上述命令执行结束后,请查看控制台输入的信息,如下图所示,”java” 必须呈现在 <font color=”blue”>To be build</font> 的栏目中,否则正式编译时不会编译 java 相干的库:
- 以下是局部配置胜利的输入信息,用于参考:
-- Python (for build): /usr/bin/python2.7
--
-- Java:
-- ant: /usr/local/apache-ant-1.9.16/bin/ant (ver 1.9.16)
-- JNI: /usr/lib/jvm/jdk1.8.0_311/include /usr/lib/jvm/jdk1.8.0_311/include/linux /usr/lib/jvm/jdk1.8.0_311/include
-- Java wrappers: YES
-- Java tests: YES
--
-- Install to: /home/will/temp/202110/30/003/opencv-4.1.1/build/install
-- -----------------------------------------------------------------
--
-- Configuring done
-- Generating done
-- Build files have been written to: /home/will/temp/202110/30/003/opencv-4.1.1/build
编译
- 在 <font color=”blue”>opencv-4.1.1/build/</font> 目录执行以下命令即可开始编译源码,参数 <font color=”red”>-j6</font> 示意六个线程并行编译(我的电脑是 6 核 CPU,您请酌情处理):
make -j6
- CPU 迅速上涨了:
- 我这里大概 10 分钟不到,实现编译
装置
- 在执行 cmake 命令的时候,曾经用 <font color=”blue”>CMAKE_INSTALL_PREFIX=./install</font> 参数指定了装置目录在 <font color=”red”>opencv-4.1.1/build/install</font>,当初执行装置命令就会将 OpenCV 的库装置到这个目录下
- 执行装置命令 <font color=”blue”>make install</font>,如果控制台没有 <font color=”red”>error</font> 相干的信息,就算装置胜利了
- 进入 install 目录看看,外面有四个目录:
bin include lib share
- 进入目录 <font color=”red”>opencv-4.1.1/build/install/share/java/opencv4</font>,外面曾经生成了咱们须要的 jar 和 so 库:
opencv4/
├── libopencv_java411.so
└── opencv-411.jar
验证
- 终于,文件曾经筹备好了,接下来写一个 java 利用验证 OpenCV 库是否失常应用
- 我这里用的是 IDEA,新建一个 java 工程,名为 <font color=”blue”>opencv-demo</font>
- 依赖本地 jar,设置办法如下:
- 选中方才生成的 opencv-411.jar
- 新建 Main.java 文件,如下所示,性能是新建窗口展现本地图片,请自行筹备图片并批改为适合的地位:
package com.company;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import static org.opencv.highgui.HighGui.*;
import static org.opencv.imgcodecs.Imgcodecs.imread;
public class Main {public static void main(String[] args) {System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat mat = imread("/home/will/temp/202110/30/pics/111.png");
if(mat.empty()) {System.out.println("Image not exists!");
return;
}
namedWindow("src", WINDOW_AUTOSIZE);
imshow("src", mat);
waitKey(0);
// 这一句很重要,否则按下任意键后看不到窗口敞开的成果
System.exit(0);
}
}
- 最初,也是十分重要的一步,就是指定 so 库的地位,点击下图红框处:
- 减少一个 VM Options 参数 java.library.path,值就是方才创立的 libopencv_java411.so 所在目录,如下图红框所示:
- 设置实现后运行 Main.java,失去后果如下,左侧就是显示本地图片的窗口:
- 至此,OpenCV 的 java 库和 so 库的生成和验证就实现了,如果您也是应用 OpenCV 的 java 程序员,心愿本文能为您带来一些参考;
https://github.com/zq2599/blog_demos
正文完