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

news2024/11/25 5:53:47

最近在业余时间学习了一些有关图像处理的代码,但是只能本地处理,满足不了将来开放远程服务的需求。
因此,查找并参考了一些资料,成功在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

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 ..

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 .. :关掉测试,提高编译效率,减少时间。 

配置完成后,可以看到以下信息
– 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

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

在这里插入图片描述

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

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

java -jar TopenCv.jar

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1267856.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

贝叶斯Python实践

贝叶斯统计学是一种基于贝叶斯定理的概率推理方法,它在机器学习领域得到了广泛的应用。Python作为一门简洁、灵活和易学的编程语言,为贝叶斯统计学的实践提供了强大的工具和库。在本文中,我们将探讨贝叶斯在Python中的实践,包括贝…

数据集笔记 :PEMS-BAY

数据地址:DCRNN - Google 云端硬盘 各station 位置:DCRNN/data/sensor_graph/graph_sensor_locations_bay.csv at master liyaguang/DCRNN (github.com) 1 读取 数据 import h5py fileDownloads/pems-bay.h5fh5py.File(file,r) f.keys()f[speed] #&…

氪了几百亿,字节游戏停止了“跳动”

目录 一、氪了几百亿,字节游戏停止了“跳动” 二微软推出跨平台框架 ML.NET 3.0 版:强化深度学习、加强AI效率 一、氪了几百亿,字节游戏停止了“跳动” 朝夕光年,扑了 11月26日,脉脉社区的一个截图内容引起大众热议…

简单位运算

文章目录 求 n n n 的第 k k k 位是二进制的几lowbit(n)操作求解 n n n 的最后一个 1 1 1题目练习AcWing 801. 二进制中1的个数CODE1 原码、补码、反码 求 n n n 的第 k k k 位是二进制的几 我们需要用到&运算符:两位都为 1 1 1 时结果才为 1 1 1 &…

easyrecovery如何恢复手机数据及硬盘数据恢复方法

EasyRecovery16是一款优秀的数据恢复软件,不仅能够兼容windows和mac双重系统,同时还能够识别u盘、存储卡、手机等多种数据储存设备,可恢复的文件类型更是多达百余种。还贴心地准备个人版、专业版和企业版的下载,增加了用户的可选性…

超小尺寸安卓主板|迷你主板|联发科MTK安卓小尺寸主板

一款超小尺寸安卓主板,尺寸仅为43.4mm*57.6mm。这款主板采用了联发科12nm制程工艺的芯片(MT6761/MT6762/MT6765/MT8788),拥有四核/八核64bit A53架构CPU,主频可达2.0GHz,功耗极低,性能卓越。默认内置1G16G内存&#xf…

初次尝到【C知道】的甜蜜

目录 一、场景描述 二、【C知道】使用 三、【C知道】的原理 四、【C知道】的坑 一、场景描述 最近有下面的需求: mysql如何通过命令查看指定表的存储引擎 习惯性在CSDN中搜文章,自己找。 皇天不负有心人,我找到了下面这个内容&#xff0…

AI模型训练——入门篇(二)

导语:本文主要介绍了基于BERT的文本分类方法,通过使用huggingface的transformers库实现自定义模型和任务。具体步骤包括:使用load_dataset函数加载数据集,并应用自定义的分词器;使用map函数将自定义分词器应用于数据集…

光伏开发过程中能运用到的软件有哪些?

在光伏开发过程中,软件的应用贯穿了整个项目生命周期,从设计到建设再到运营管理。下面是一些在光伏开发过程中可能用到的软件工具: 制图和设计软件:CAD软件如AutoCAD、Bentley等被广泛用于光伏系统的设计和制图。这些软件可以帮助…

装饰设计模式(常用)

装饰器模式(装饰设计模式) 我们这些上班族大多都有睡懒觉的习惯,每天早上上班时间都很紧张,于是很多人为了多睡一会,就会用方便的方式解决早餐问题。有些人早餐可能会吃煎饼,煎饼中可以加鸡蛋,…

AutoDIR: Automatic All-in-One Image Restoration with Latent Diffusion

AutoDIR: Automatic All-in-One Image Restoration with Latent Diffusion (Paper reading) Yitong Jiang, The Chinese University of Hong Kong, arXiv23, Code, Paper 1. 前言 我们提出了一种具有潜在扩散的一体化图像恢复系统,名为AutoDIR,它可以…

供应链 | “利刃出鞘”——顶刊POMS论文解读:制造商借助电子商务部门入侵

论文解读者:肖善,温梓曦,张怡雯,杨子豪 编者按: 解密品牌商在线电商平台:组织结构、策略选择、三方共赢 Manufacturer encroachment with an e‐commerce division 原文作者信息 Shi, S., Wang, C., Ch…

C语言进阶指南(14)(部分字符串库函数及其模拟实现)

欢迎来到博主的专栏——C语言进阶指南 博主id:reverie_ly 文章目录 1、strlen()——字符串长度计算函数自定义strlen函数的实现 2、strcpy——字符串拷贝函数strcpy的模拟实现 3.strcat——字符串追加函数strcat的模拟实现 4、strcmp——字符…

喜讯!安全狗入选《2024中国企业服务云图(精选版)》多个细分领域

近日,由吴中区人民政府、苏州市工信局指导,崔牛会主办,苏州太湖国家旅游度假区管委会协办的2023中国SaaS大会在苏州顺利举办。 作为国内云原生安全领导厂商,安全狗突出的多项安全能力也在大会上受到认可。 厦门服云信息科技有限公…

软件需求分析报告

《软件需求分析报告》 软件开发全套资料获取:点我获取

VR虚拟教育展厅,为教学领域开启创新之路

线上虚拟展厅是一项全新的展示技术,可以为参展者带来不一样的观展体验。传统的实体展览存在着空间限制、时间限制以及高昂的成本,因此对于教育领域来说,线上虚拟教育展厅的出现,可以对传统教育方式带来改革,凭借强大的…

【RT-DETR改进】SIoU、GIoU、CIoU、DIoU、AlphaIoU等二十余种损失函数

一、本文介绍 这篇文章介绍了RT-DETR的重大改进,特别是在损失函数方面的创新。它不仅包括了多种IoU损失函数的改进和变体,如SIoU、WIoU、GIoU、DIoU、EIOU、CIoU,还融合了“Alpha”思想,创造了一系列新的损失函数。这些组合形式的…

私域数字化建设:解锁企业融资新引擎

私域数字化建设对于增加企业融资能力的机遇是十分重要的,随着数字化经济的快速发展和数据技术的不断进步,企业需要正确认识到数据资产的重要性和私域数字化建设在提升融资能力等方面所带来的机遇。 近期,财政部发布了《企业数据资源相关会计…

教你设置疯狗都咬不烂的防火墙

1 安全技术和防火墙 1.1 安全技术 入侵检测系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报警和事后监督为主,提供有针对性的指导措施和安全…

一文详解Python中常用数据类型

文章目录 Python 中常用的数据类型包括:Python 中布尔类型(bool)Python 中的数字类型概述Pyhon中的字符串概述Python 中的List概述Python 中的元组类型(tuple)Python中的字典(Dictionary)Python中的集合(Set)Python中的…