欢送拜访我的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>

环境和版本

  1. 操作系统:16.04.7 LTS(桌面版)
  2. java:1.8.0_311
  3. ANT:1.9.16
  4. 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_311export JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexport 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.16export PATH=$ANT_HOME/bin:$PATH
  • 执行命令<font color="blue">source ~/.bashrc</font>
  • 查看java和ANT装置是否实现:
will@hp:~$ java -versionjava 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 -versionApache 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