• linux环境下编译安装OpenCV For Java(CentOS 7)


    最近在业余时间学习了一些有关图像处理的代码,但是只能本地处理,满足不了将来开放远程服务的需求。
    因此,查找并参考了一些资料,成功在centos7环境安装上了opencv 460。
    下面上具体安装步骤,希望能帮到有需要的同学。

    1、基础环境安装

    # 安装 SCL 源
    yum install -y centos-release-scl 
    
    # 安装 gcc8 g++8
    yum install -y devtoolset-8-gcc*
    
    #设置环境变量
    echo 'source /opt/rh/devtoolset-8/enable' >> /etc/profile
    
    #使环境变量生效
    source /etc/profile
    
    #查看版本 
    gcc --version 
    g++ --version
    
    # 安装 python3 及后续所需工具,安装 Python 3.6.8 ,也可以安装指定版本。官网地址:  https://www.python.org
    yum install -y python3 python3-devel python3-libs python3-tools wget unzip vim
    
    #安装升级 python-pip
    python3 -m ensurepip
    python3 -m pip install --upgrade pip
    
    #查看版本
    python3 -V
    
    
    #安装 cmake-3.20.0  cmake 必要依赖 openssl
    yum install -y openssl openssl-devel
    
    #获取CMake源码包
    wget -O cmake-3.20.0.tar.gz https://cmake.org/files/v3.20/cmake-3.20.0.tar.gz
    
    #解压CMake源码包
    tar -zvxf cmake-3.20.0.tar.gz
    
    #进入目录,注意以下目录需要和自己实际目录对应
    cd /root/cmake-3.20.0/
    
    #进行配置
    ./bootstrap --prefix=/usr/local/cmake
    
    #编译安装
    make && make install
    
    #配置CMake环境变量
    vim /etc/profile
    
    #在文件末尾添加以下内容:
    export PATH=/usr/local/cmake/bin:$PATH
    
    #保存并退出, 使配置生效
    source /etc/profile
    
    #如果环境变量配置错误,会导致所有命令失效,此时可以用以下指令修改删除错误参数
    /bin/vi /etc/profile
    
    #如果centos7.x 报错:,可以尝试以下方法,不报错则自动忽略即可
    	/usr/libexec/grepconf.sh: line 5: grep: command not found
    	export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin
    	source
    
    #查看CMake版本信息
    cmake --version
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64

    2、配置opencv

    #安装 opencv 依赖 ,如果需要生成 Java 相关的 .jar .so 。ant 依赖必要安装
    yum install -y zlib-devel ant opencv-python libjpeg-turbo-devel libpng-devel libtiff-devel jasper-devel
    
    
    # 查看已安装的jdk包,装完以后,你会发现他会给你装个 open-jdk1.8,建议卸载掉
    rpm -qa | grep jdk 
    # 删除对应jdk软件包 xxx 为软件包名称 rpm -e --nodeps xxx 参考: 
    rpm -e --nodeps copy-jdk-configs-3.3-11.el7_9.noarch java-1.8.0-openjdk-1.8.0.382.b05-1.el7_9.x86_64 java-1.8.0-openjdk-headless-1.8.0.382.b05-1.el7_9.x86_64 java-1.8.0-openjdk-devel-1.8.0.382.b05-1.el7_9.x86_64
    
    #下载 opencv 源码包
    wget -O opencv.zip https://ghproxy.com/https://github.com/opencv/opencv/archive/refs/tags/4.6.0.zip
    wget -O opencv_contrib.zip https://ghproxy.com/https://github.com/opencv/opencv_contrib/archive/refs/tags/4.6.0.zip 
    
    #解压下载完成的源码包,注意源码包存放的具体位置要和自己环境一致
    unzip opencv-4.6.0.zip
    unzip opencv_contrib-4.6.0.zip
    
    #创建并进入 build 目录
    cd opencv-4.6.0 && mkdir build && cd build
    
    #cmake 进行参数配置,注意源码包存放的具体位置要和自己环境一致
    cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_EXTRA_MODULES_PATH=/workstation/opencv_contrib-4.6.0/modules -D ENABLE_CXX11=ON -D WITH_1394=OFF -D BUILD_opencv_xfeatures2d=OFF -D BUILD_SHARED_LIBS=OFF -D BUILD_TESTS=OFF ..
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    cmake参数说明

    -D CMAKE_BUILD_TYPE=RELEASE :编译发布版本
    -D CMAKE_INSTALL_PREFIX=/usr/local :编译后的安装主目录
    -D OPENCV_GENERATE_PKGCONFIG=ON :这个是生成pkg-config的命令,默认是不生成的(OFF)
    -D OPENCV_EXTRA_MODULES_PATH=/opt/opencv_contrib-4.4.0/modules :这个就是拓展包中附加模块路径,这个地址需要自定义
    -D ENABLE_CXX11=ON :C++版本支持
    -D WITH_1394=OFF :这个好像要加些依赖,关掉。不关也没关系
    -D BUILD_opencv_xfeatures2d=OFF :这里要重点说一下,在附件模块opencv_contrib-4.4.0/modules里面有很多目录,如果有些你不想要就关掉。比如xfeatures2d这个就导致我编译不过,我又不用,直接关掉。
    -D BUILD_SHARED_LIBS=OFF :这个重点说,就是让依赖库变成一个SO而不是很多SO。这个SO就是java的jni要用的。
    -D BUILD_TESTS=OFF .. :关掉测试,提高编译效率,减少时间。 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    配置完成后,可以看到以下信息
    – Configuring done
    – Generating done
    – Build files have been written to: /root/opencv-4.6.0/build
    在这里插入图片描述PS:可能会有下载失败的文件,输出依然显示完成。如果您对 opencv 熟悉可以更换安装包默认的下载链接或者懂得 github 加速可能不会有此问题。

    查看 CMakeDownloadLog.txt ,检查下载文件是否都下载完成。如果日志有下载失败的文件,只需到该目录重新下载文件即可。下载失败示例:

    对于在线下载失败的文件,我后面其实也没下载,后续编译依然可以通过。

    #查看下下载失败的文件
    vim /workstation/opencv-4.6.0/build/CMakeDownloadLog.txt 
    
    # 进入 ippicv 目录手动下载,替换下载失败的文件。其他失败文件也是按照此方法。
    cd /root/opencv-4.6.0/.cache/ippicv
    
    # 下载 ippicv 文件
    wget -O 7421de0095c7a39162ae13a6098782f9-ippicv_2020_lnx_intel64_20191018_general.tgz https://ghproxy.com/https://raw.githubusercontent.com/opencv/opencv_3rdparty/a56b6ac6f030c312b2dce17430eef13aed9af274/ippicv/ippicv_2020_lnx_intel64_20191018_general.tgz
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3、编译opencv

    #修复完成构建日志中下载失败的所有文件后, 查看内核数
    nproc
    
    #进入目录:
    cd  /workstation/opencv-4.6.0/build
    
    #输出 8 表示系统是 8核,使用 8 线程编译,我实际是2核
    make -j2
    
    #编译完成后,出现下图所示:
    [ 98%] Building CXX object modules/gapi/CMakeFiles/opencv_perf_gapi.dir/perf/cpu/gapi_imgproc_perf_tests_fluid.cpp.o
    [ 98%] Building CXX object modules/gapi/CMakeFiles/opencv_perf_gapi.dir/perf/cpu/gapi_video_perf_tests_cpu.cpp.o
    [ 98%] Building CXX object modules/gapi/CMakeFiles/opencv_perf_gapi.dir/perf/gpu/gapi_core_perf_tests_gpu.cpp.o
    [ 98%] Building CXX object modules/gapi/CMakeFiles/opencv_perf_gapi.dir/perf/gpu/gapi_imgproc_perf_tests_gpu.cpp.o
    [ 98%] Building CXX object modules/gapi/CMakeFiles/opencv_perf_gapi.dir/perf/internal/gapi_compiler_perf_tests.cpp.o
    [ 98%] Building CXX object modules/gapi/CMakeFiles/opencv_perf_gapi.dir/perf/perf_bench.cpp.o
    [100%] Building CXX object modules/gapi/CMakeFiles/opencv_perf_gapi.dir/perf/perf_main.cpp.o
    [100%] Building CXX object modules/gapi/CMakeFiles/opencv_perf_gapi.dir/perf/render/gapi_render_perf_tests_ocv.cpp.o
    [100%] Building CXX object modules/gapi/CMakeFiles/opencv_perf_gapi.dir/perf/streaming/gapi_streaming_source_perf_tests.cpp.o
    [100%] Linking CXX executable ../../bin/opencv_perf_gapi
    [100%] Built target opencv_perf_gapi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    在这里插入图片描述

    4、安装opencv

    #安装
    make install 
    
    #opencv 默认会到 /usr/lib 目录下查找依赖,所有将 libopencv_java460.so复制到 usr/lib 
    # 如果不知道 libopencv_java460.so 在哪,可以使用 find 命令进行查找
    find / -name 'libopencv_java*'
    # 拷贝到 /usr/lib,后续在程序运行过程中如果出现占so库用错误,执行以下命令即可解决!
    cp /usr/local/share/java/opencv4/libopencv_java460.so /usr/lib
    cp /usr/local/share/java/opencv4/libopencv_java460.so /usr/lib
    
    #将链接文件 opencv4.pc 文件指向 /usr/share/pkgconfig 目录的文件并运行 ldconfig 以重建库缓存
    # 将 /usr/local/lib64/pkgconfig/opencv.pc 链接到 /usr/share/pkgconfig/​​​​
    ln -s /usr/local/lib64/pkgconfig/opencv.pc /usr/share/pkgconfig/​​​​
    
    # 使链接生效
    ldconfig
    
    #添加环境变量
    echo 'export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib64/pkgconfig' >> /etc/profile​
    echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64' >> /etc/profile
    
    # 使环境变量生效
    source /etc/profile
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    至此,opencv编译安装完成。编写程序检测效果图如下:

    java -jar TopenCv.jar
    
    • 1

    在这里插入图片描述在这里插入图片描述

  • 相关阅读:
    已解决!nginx+php上传大文件返回502错误
    Apple ID 登录
    NLP实践!文本语法纠错模型实战,搭建你的贴身语法修改小助手 ⛵
    有效的字母异位词(哈希表)
    Remove和RemoveLast用法
    利用WebStorm开发react——本文来自AI创作助手
    Stable Diffusion的入门介绍和使用教程
    数学知识复习:第二型曲线积分
    GBase 8c 函数和操作符 - 数组函数和操作符 之 数组操作符
    Vue中 引入使用 localforage 改进本地离线存储(突破5M限制)
  • 原文地址:https://blog.csdn.net/Mattscl/article/details/134681155