离线编译安装opencv库及多版本切换[ubuntu]

系统版本:ubuntu18.04

库版本:opencv4.6.0 & opencv3.6.0

一、多版本安装前准备

1. 卸载已经安装的opencv版本[可选]

 1.1 卸载从软件仓库中安装的opencv

sudo apt-get purge libopencv* 

1.2 卸载使用source自行编译安装的opencv

首先进入原先编译opencv的build目录,在该目录下打开终端;再执行以下代码。(注意如果build已经删除了,可以重新编译一遍该版本的opencv,然后在最后一步执行sudo make uninstall

sudo make uninstall
cd ..
sudo rm -r build
sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*

以上可能有error,可忽略,最后执行如下操作: 

sudo apt-get --purge remove opencv-doc opencv-data python-opencv

二、安装opencv3.4.15

2.1 下载opencv3.4.15:

链接1: GitHub - opencv/opencv_contrib at 3.4.15

链接2:Releases - OpenCV 

2.2 下载opencv_contrib

注意:这里要与上面下载的opencv版本一致

 链接:

GitHub - opencv/opencv_contrib at 3.4.15

 2.3 编译源码

2.3.1  下载好后,将opencv_contrib放到解压后opencv文件夹里面

2.3.2 安装依赖项

  sudo apt-get update
  sudo apt-get upgrade
  sudo apt-get install build-essential
  sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
  sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

2.3.3 cmake编译

2.3.3.1 在该文件夹opencv-3.4.15下打开终端

后续步骤参见下文3.3.3节

三、安装opencv4.6.0

3.1 下载opencv4.6.0

链接1:GitHub - opencv/opencv at 4.6.0

链接2:Releases - OpenCV

3.2 下载opencv_contrib

注意:这里要与上面下载的opencv版本一致

链接:https://github.com/opencv/opencv_contrib/tree/4.6.0 

3.3 编译源码

3.3.1 两个都下载好以后,把opencv_  opencv_contrib放到解压后opencv文件夹里面

3.3.2 安装依赖

  sudo apt-get update
  sudo apt-get upgrade
  sudo apt-get install build-essential
  sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
  sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

3.3.3 cmake编译

3.3.3.1 在该文件夹opencv-4.6.0下打开终端

 mkdir build && cd build

(1) 不编译opencv_contrib、cuda

注意:CMAKE_INSTALL_PREFIX=/usr/local/opencv-4.6.0

cmake -D CMAKE_INSTALL_PREFIX=/usr/local/opencv-4.6.0 -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_ENABLE_NONFREE=True ..

注解:
1. CMAKE_INSTALL_PREFIX 是opencv的安装地址 默认安装在 usr/local
2. CMAKE_BUILD_TYPE 是opencv安装的版本,Release和Debug两种可选,默认安装Release
3. OPENCV_ENABLE_NONFREE 是否使用部分被申请了专利的算方法 这里选True的话就可以使用了
4. OPENCV_GENERATE_PKGCONFIG 强烈建议开启这个 设置为ON OPENCV_GENERATE_PKGCONFIG 因为opencv4默认不生成.pc文件,所以加上这句用于生成opencv4.pc文件,支持pkg-config功能。opencv4版本及以上 这里用ON. 

(2) 编译opencv_contrib,不编译cuda

注意:CMAKE_INSTALL_PREFIX=/usr/local/opencv-4.6.0

OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.6.0/modules 

cmake -D CMAKE_BUILD_TYPE=RELEASE \
	-D CMAKE_INSTALL_PREFIX=/usr/local/opencv-4.6.0 \
	-D INSTALL_PYTHON_EXAMPLES=ON \
	-D INSTALL_C_EXAMPLES=OFF \
    -D OPENCV_GENERATE_PKGCONFIG=ON \
	-D OPENCV_ENABLE_NONFREE=ON \
	-D OPENCV_DNN_CUDA=ON \
	-D ENABLE_FAST_MATH=1 \
	-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.6.0/modules \
	-D HAVE_opencv_python3=ON \
	-D PYTHON_EXECUTABLE=usr/bin/python3 \
	-D BUILD_EXAMPLES=ON ..


cmake -DCMAKE_BUILD_TYPE=RELEASE -DOPENCV_EXTRA_MODULES_PATH= ../opencv_contrib-4.6.0/modules -DCMAKE_INSTALL_PREFIX=/usr/local/opencv-4.6.0 -DWITH_CUDA=OFF -DBUILD_EXAMPLES=ON -DBUILD_DOCS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DOPENCV_GENERATE_PKGCONFIG=YES -DOPENCV_ENABLE_NONFREE=True -DBUILD_opencv_world=OFF ..
 

可能出现的错误:

ippicv_2020_win_intel64_20191018_general.zip等文件下载失败的解决办法,找了好久,还是这位老哥的方法解决了问题-CSDN博客

(3) 编译opencv_contrib、cuda

cmake -D CMAKE_BUILD_TYPE=RELEASE \
	-D CMAKE_INSTALL_PREFIX=/usr/local/opencv-4.6.0 \
	-D INSTALL_PYTHON_EXAMPLES=ON \
	-D INSTALL_C_EXAMPLES=OFF \
    -D OPENCV_GENERATE_PKGCONFIG=ON \
	-D OPENCV_ENABLE_NONFREE=ON \
	-D WITH_CUDA=ON \
	-D WITH_CUDNN=ON \
	-D OPENCV_DNN_CUDA=ON \
	-D ENABLE_FAST_MATH=1 \
	-D CUDA_FAST_MATH=1 \
	-D CUDA_ARCH_BIN=7.5 \
	-D WITH_CUBLAS=1 \
	-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.6.0/modules \
	-D HAVE_opencv_python3=ON \
	-D PYTHON_EXECUTABLE=usr/bin/python3 \
	-D BUILD_EXAMPLES=ON ..

从上,WITH_CUDA和WITH_CUDNN项指的是用CUDA和cuDNN。OPENCV_DNN_CUDA项表示我们要编译后的dnn模块支持CUDA。ENABLE_FAST_MATH, CUDA_FAST_MATH和WITH_CUBLAS项是为了优化运算而开启的。

 3.3.3.2 cmake结束后make

注:终端输入nproc 命令可以查看自己电脑有多少线程。我的电脑有8个。

sudo make -j8

3.3.3.3 安装指令

sudo make install

3.3.3.4 配置环境

sudo gedit /etc/ld.so.conf.d/opencv.conf

新增 /usr/local/opencv-4.6.0/lib

保存后终端输入

sudo ldconfig

更新共享链接库

sudo gedit /etc/bash.bashrc

在文末新增:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/opencv-4.6.0/lib/pkgconfig
export PKG_CONFIG_PATH

保存后退出,终端输入以下命令使配置生效

source /etc/bash.bashrc

更新一下

sudo updatedb

查看是否安装成功,成功则会输出版本号 

pkg-config --modversion opencv

四、配置菜单选项

打开终端,输入以下指令

sudo update-alternatives --install /usr/local/opencv opencv /usr/local/opencv-3.4.15/ 3415
sudo update-alternatives --install /usr/local/opencv opencv /usr/local/opencv-4.6.0/ 4600 

切换指令

sudo update-alternatives --config opencv

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人生感悟 | 又是一年,眼看要2024了

哈喽,你好啊,我是雷工! 刚过完大雪节气没两天,气温开始急转直下,走在路上明显感觉冷了许多。看天气预报很多地区已经开始下雪了。 看日历已经12月9号了,12月份,一年的最后一个月,2…

自然语言处理阅读第二弹

HuggingFace 镜像网站模型库 NLP中的自回归模型和自编码模型 自回归:根据上文内容预测下一个可能的单词,或者根据下文预测上一个可能的单词。只能利用上文或者下文的信息,不能同时利用上文和下文的信息。自编码:对输入的句子随…

【TB作品】STM32 PWM之实现呼吸灯,STM32F103RCT6,晨启

文章目录 完整工程参考资料实验过程 实验任务: 1:实现PWM呼吸灯,定时器产生PWM,控制实验板上的LED灯亮灭; 2:通过任意两个按键切换PWM呼吸灯输出到两个不同的LED灯,实现亮灭效果; 3&…

FRP 内网穿透工具部署

FRP 介绍 frp 是一个专注于内网穿透的高性能反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 官方网站:https://gofrp.org/zh-cn/ 项目地…

ARS430毫米波雷达标定步骤

工具准备:CANoe, 标定工程文件,雷达标定板,三脚架,激光器,平口钳,气泡水平仪,小镜子,双面胶。 将车辆放置在车辆前方至少有20米空白视野的场地上。使用气泡水平仪大概使…

谈一谈网络协议中的传输层

文章目录 UDPTCPTCP为什么可靠 UDP 传输层的作用是负责能够从发送端到传输端。 我们的主机上有多个程序,那么怎么分辨哪个信息是发给哪个程序的呢?—端口号。其是一个16位的无符号整型,端口号分为知名端口号(0-1023)和…

基于YOLOv8深度学习的路面标志线检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

使用sha512对上传到linux服务器的文件进行校验

什么是SHA-512 SHA-512(安全散列算法 512 位)是一种密码散列函数,属于SHA-2家族的一部分。它是由美国国家安全局(NSA)设计的一种安全散列算法,用于产生数字摘要,通常用于数据完整性验证、数字签…

3D角色生成式AI:原理及实现

自从开创性论文Denoising Diffusion Probabilistic Models发布以来,此类图像生成器一直在改进,生成的图像质量在多个指标上都击败了 GAN,并且与真实图像无法区分。 NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis…

《点云处理》 提取点云内点和外点

前言 关于内点(inliers)和外点(outliers)在点云处理方向上是个非常常见的名词。有时候,内点也会被称之为有效点,而外点会被称之为无效点。所谓有效和无效都是相对而言的,无效不一定是真的没有意…

拖拽属性 draggable

H5 新增的属性 draggable,它能够给与一切的 html 元素拖动的效果。 拖拽元素 属性为 draggable"true" 的元素,可拖动,且拖动时鼠标变为禁用图标 ps: 直接写 draggable 可能无效 ondragstart 开始拖拽时触发(按下鼠标…

【SpringMVC】SpringMVC简介、过程分析、bean的加载和控制

文章目录 1. SpringMVC简介2. SpringMVC入门案例文件结构第一步:坐标导入第二步:创建SpringMVC容器的控制器类第三步:初始化SpringMVC环境,设定Spring加载对应的bean第四步:初始化Servlet容器,加载SpringMV…

PyQt6 QScrollBar滚动条控件

锋哥原创的PyQt6视频教程: 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计48条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话版…

实验记录:可能造成深度学习模型训练过程中准确率振荡的原因

可能造成模型训练过程中准确率振荡的原因: 数据集因素: 1.数据集中含有噪声或者样本分布不平衡,这会导致模型学习到一些错误的规律,从而引起训练准确率的震荡。 2.训练数据量过小。如果训练数据集过小,会导致样本不足…

Y4M视频文件格式

什么是Y4M 以YUV4Mpeg格式创建的视频文件;这个视频文件存储了一组未压缩的YCbCr图像,这些图像逐帧组成视频;在压缩成MPEG-2或Matroska等更流行的视频格式之前,用作原始的彩色视频格式 Y4M文件是一个纯文本格式的header开始,header有0或多个…

ARM架构简析

全局与局量等知识 断电后,程序以及数据都在FLASH中。 断电后,内存中就没有变量了。 程序在烧在FLASH中的; 程序运行的时候,全局变量的初始值,必然是从FLAASH中的来的: 初始化全局变量的过程:…

B01、JVM与Java体系结构-01

字节码与多语言混合编程 字节码概述: 我们平时说的java字节码,指的是用java语言编译成的字节码。准确的说任何能在jvm平台上执行的字节码格式都是一样的。所以应该统称为:jvm字节码。不同的编译器,可以编译出相同的字节码文件&…

【面试】广告优化

a1:点击率公式是什么?点击率低的原因是什么? 点击率点击/曝光,点击率低的原因主要有两点:一是创意不吸引人;二是目标受众不准确/定向过宽不精确,广告曝光给了对产品不感兴趣用户 a2:…

Google Gemini 模型本地可视化

Google近期发布了Gemini模型,而且开放了Gemini Pro API,Gemini Pro 可免费使用! Gemini Pro支持全球180个国家的38种语言,目前接受文本、图片作为输入并生成文本作为输出。 Gemini Pro的表现超越了其他同类模型,当前版…

version `GLIBC_2.29‘ not found 的原因和怎么解决问题

程序上经常有在这台Linux上编译,然后放到另一个Linux上运行的情况。 如果Linux版本差别不大或都是ubuntu或centos系列还好。 如果不是一个系列很容易出现GLIBC 找不到的情况。 尤其是ubuntu上编译,然后放到centos系列。因为centos为了追求所谓的稳定&…