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 foundexport PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/binsource#查看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.mzph.cn/news/184319.shtml

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

相关文章

FP5207 DC-DC 电源升压模块/12V升24V(5A) 升压板/升压电路/直流稳压/直流升压-应用蓝牙音箱、快充、应急电源、车载设备等

目录 概述 特征 应用 概述 FP5207是异步升压控制IC,透过EXT Pin控制外部NMOS,输入低启动电压2.8V与宽工作电压5V~24V,单节锂电池3V~4.2V应用,将Vout接到HVDD Pin;精准的反馈电压1.2V,内置软启动&#x…

Flutter App混淆加固、保护与优化原理

​ 引言 在移动应用程序开发中,保护应用程序的代码和数据安全至关重要。本文将探讨如何对Flutter应用程序进行混淆、优化和保护,以提高应用程序的安全性和隐私。 一、混淆原理 混淆是一种代码保护技术,通过修改源代码或编译后的代码&#…

c/c++概念辨析-指针常量常量指针、指针函数函数指针、指针数组数组指针

概念澄清: 统一规则: 不管是XX指针,还是指针XX,后者是本体,前者只是个定语,前者也可以替换为其他同类(例如字符串),帮助理解。 XX指针: 可简单理解为&#…

Image Segmentation Using Deep Learning: A Survey

论文标题:Image Segmentation Using Deep Learning:A Survey作者:发表日期:阅读日期 :研究背景:scene understanding,medical image analysis, robotic perception, video surveillance, augmented reality, and image…

安卓+charles实现抓包(主要解决证书网站无法打开问题)

安装 官网下载 https://www.charlesproxy.com/latest-release/download.do 使用介绍 Charles介绍 上面链接看一至三即可 初步代理配置 如何获取代理服务器IP和手机端IP 代理服务器IP 点击help,选中ssl 代理,点击在移动设备或远程浏览器上安装Cha…

如何练好太极拳?

太极拳是一种需要细心和耐心的武术,要练好太极拳,需要从以下几个方面入手: 找到好的师傅:找到一位经验丰富、技艺高超的师傅是学习太极拳的关键。师傅应该具备正确的太极拳理论、技术和经验,能够正确地指导学生学习太极…

M1安装RabbitMQ

1.查看centos内核版本 uname -a uname -r2.安装之前的准备工作 安装RabbitMQ必装Erlang(RabbitMQ官网添加链接描述) 2.1.Erlang简介 Erlang是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对…

漏洞复现--安恒明御安全网关 aaa_local_web_preview 任意文件上传

免责声明: 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

爬虫学习 逆向爬虫(六)

多任务异步协程 协程:更高效的利用CPU import timedef func():print("黎明")time.sleep(3)print("还是黎明")func() 等待时机长 sleep时CPU不再工作 IO操作(费时不费力)->阻塞 线程运行阻塞后 移出主线程 移动到下一个 4个任务一个线程 …

一套后台管理系统的入门级的增删改查(vue3组合式api+elemment-plus)

一、页面示意: 图一 图二 二、组件结构 列表组件 :index.vue,对应图一添加组件:add.vue,对应图二,用抽屉效果编辑组件:edit.vue,和添加组件的效果一个。 三、代码 1、列表组件: index.vue …

我在Vscode学OpenCV 图像处理一(阈值处理、形态学操作【连通性,腐蚀和膨胀,开闭运算,礼帽和黑帽,内核】)

文章目录 一、阈值处理1.1 OpenCV 提供了函数 cv2.threshold()和函数 cv2.adaptiveThreshold(),用于实现阈值处理1.1.1. cv2.threshold():(1)在函数cv2.threshold()中,参数threshold_type用于指定阈值处理的方式。它有以下几种可选的阈值类型…

哈希桶——开放定址法

哈希表的迭代器&#xff1a; 迭代器模板介绍&#xff1a; template<class K, class T, class Ref, class Ptr, class KeyOfT, class Hash> K:关键词类型 T:存储的数据类型 Ref:T& &#xff08;operator*() 解引用函数的返回类型&#xff09; Ptr:T* (oper…

CDA level-2 备考经验分享 转数据分析师CDA证书备考 考试相关说明

抓住了23年的尾巴&#xff0c;正好给我考过了CDA level-2 &#xff0c;虽然今年只有这几个小收获&#xff0c;但是还是很开心了&#xff0c;毕竟知足常乐嘛。 由于工作原因&#xff0c;因此复习都是间断性的&#xff0c;勉勉强强给通过了&#xff0c;只得了个C。 考试注册报名与…

台灯到底对眼睛好不好?推荐高品质的护眼台灯

其实只要我们挑选一盏专业的台灯&#xff0c;并且正确的使用&#xff0c;那么台灯对眼睛是有很大的好处的&#xff01;如今夜间工作、学习已然成为了再常见不过的事情&#xff0c;在夜间最大的痛点就是光照不足&#xff0c;如果单靠室内灯是远远不足的&#xff0c;而且光线的分…

基于Springboot的房产销售系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的房产销售系统(有报告)。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring Sp…

次世代建模纹理贴图怎么做?

在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 1、什么是次时代建模&#xff1f; "次世代建模"是一个术语&#xff0c;通常用来描述…

Linux--2.6内核调度和环境变量

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、Linxu2.6内核进程调度队列1、一个CPU拥有一个runqueue2、优先级3、优先级活动队列4、过期…

VC++调试QT源码

环境&#xff1a;vs2017 qt 5.14.2 1&#xff1a;首先我们需要选择我们的源码路径 右键解决方案-》属性-》通用属性-》调试源文件-》在窗口内添加QT下载时的源码**.src文件夹**&#xff0c;这里最好把源码 D:\software\QT\path\5.14.2\Src 源文件里面的Src文件做一个备份出来…

Android UiAutoMatorViewer打不开

UIAutoMatorViewer是个很好用的工具&#xff0c;能解析出任意手机页面的UI树&#xff0c;非常方便。 工具位置&#xff1a;SDK\tools\bin\uiautomatorviewer.bat 一般双击就能打开。 但有时会打不开&#xff0c;双击后无反应&#xff0c;在cmd窗口中运行也是如此。 这种情况…

【Linux】第二十三站:缓冲区

文章目录 一、一些奇怪的现象二、用户级缓冲区三、用户级缓冲区刷新问题四、一些其他问题1.缓冲区刷新的时机2.为什么要有这个缓冲区3.这个缓冲区在哪里&#xff1f;4.这个FILE对象属于用户呢&#xff1f;还是操作系统呢&#xff1f;这个缓冲区&#xff0c;是不是用户级的缓冲区…