ubuntu20安装opencv3.2记录

news2024/11/5 12:44:25

系统环境

ubuntu20安装了ros-noetic,所以系统默认装了opencv4.2.0,但是跑fastlivo推荐的是opencv3.2.0,而且海康相机别人写的ros驱动(海康相机ros驱动)也是需要opencv3.2.0,最终还是选择安装多版本的opencv。

opencv3.2.0安装过程

1、下载安装包

opencv的github链接
下载对应的3.2.0版本

2、安装依赖

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

libjasper-dev安装不了,可以参考问题解决:“E: 无法定位软件包 libjasper-dev,加一个apt源去安装

3、编译

为了管理多版本,一般需要单独创建opencv3.2.0目录,我就直接在/usr/local/opecv3.2.0创建目录,并且最终安装在这里。

cd ~/Downloads/depedence/opencv-3.2.0
mkdir build # 创建build文件夹
cd build # 进入build文件夹
cmake -D CMAKE_BUILD_TYPE=Release 
-D OPENCV_GENERATE_PKGCONFIG=ON 
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.2.0 
-D ENABLE_PRECOMPILED_HEADERS=OFF -D WITH_CUDA=OFF .. 

注意上面设置好安装目录,选择生成pkgconfig文件(方便查看和调用)。最重要的注意WITH_CUDA=OFF,没加这个之前,cmake的过程回报错没法进行后续编译,所以把cuda禁用(一般也用不到)。

make -j8
sudo make install

注意编译的过程中也会有报错,可以参考Ubuntu 20.04 安装opencv3.2.0 及报错解决方法,具体就是:

问题1:/usr/include/c++/9/cstdlib:75:15: fatal error: stdlib.h: 没有那个文件或目录 
 
解决方法:cmake时加上参数-D ENABLE_PRECOMPILED_HEADERS=OFF
 
 
问题2:error: 'CODEC_FLAG_GLOBAL_HEADER' was not declared in this scope 
 
解决方法:在opencv/opencv-3.2.0/modules/videoio/src/cap_ffmpeg_impl.hpp 文件里添加:
#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22)
#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
#define AVFMT_RAWPICTURE 0x0020
 
问题3:make[2]: *** [modules/python3/CMakeFiles/opencv_python3.dir/build.make:56: modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o] Error 1make[1]: *** [CMakeFiles/Makefile2:21149: modules/python3/CMakeFiles/opencv_python3.dir/all] Error 2
解决方法:找到cv2.cpp,大约在730行,将
char* str = PyString_AsString(obj);
改为
char* str = (char *)PyString_AsString(obj);

漫长等待后就安装完了。

4、配置系统环境

打开系统环境文件

sudo gedit ~/.bashrc 

然后把pkg-config和lib的路径加上

export LD_LIBRARY_PATH=/usr/local/opencv3.2.0/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/opencv3.2.0/lib/pkgconfig:$PKG_CONFIG_PATH

验证opencv版本

pkg-config --modversion opencv

最终的输出是

3.2.0

安装完成,后续就是安装cv_bridge

cv_bridge安装

参考:ROS学习:cv_bridge与opencv版本冲突三种解决方法
简单理解一个cv_bridge版本对应一个opencv,因为一开始ros安装的opencv版本为4.2.0,所以cv_bridge也是关于opencv4.2.0的。那么如果ros还需要用opencv3.2.0并且用cv_bridge那么就需要再编译一个cv_bridge对应opencv3.2.0。下面就是重新编译cv_bridge的过程。

1、下载cv_bridge

下载链接:vision_opencv,记得找到对应ros版本的进行下载,ubuntu20一般找的是noetic。

2、编译

直接把里面的cv_bridge复制到你自己的工作空间中。
然后改cmakelist,把opencv的版本和目录改成自己想要的。

# set(_opencv_version 4)
# find_package(OpenCV 4 QUIET)
# if(NOT OpenCV_FOUND)
#   message(STATUS "Did not find OpenCV 4, trying OpenCV 3")
#   set(_opencv_version 3)
# endif()

set(OpenCV_DIR /usr/local/opencv3.2/share/Opencv)
find_package(OpenCV 3.2.0 REQUIRED
  COMPONENTS
    opencv_core
    opencv_imgproc
    opencv_imgcodecs
  CONFIG
)

上面注释的是改正前的,下面是改正后的,改成opencv3.2.0。然后就是编译。

catkin_make

3、编译海康相机驱动

接着就是把海康相机的驱动MVS_ROS拷贝到工作空间中。
先把工作空间中的cv_bridge包的目录更新到当前终端,查看更新情况

source devel/setup.bash
rospack find cv_bridge

如果输出的是工作空间中的cv_bridge就说明更新成功,接着就是一起编译。整个工作空间的结构是这样的:
在这里插入图片描述

4、启动海康相机驱动

source devel/setup.bash
roslaunch hikrobot_camera hikrobot_camera_rviz.launch 

就能看到相机的话题发布的图像了:
在这里插入图片描述
后续就是调相机参数再跑算法了。

opencv的卸载

ubuntu20安装opencv4和opencv_contrib 多版本共存
openCV安装后的源码尽可能保留,因为可以直接从build文件夹下卸载已经安装的openCV。在ubuntu终端命令行输入以下命令进入安装opencv的build目录并进行卸载操作。

cd build
sudo make uninstall
cd  .. 
sudo rm -r build

最后删除/usr下关于opencv的文件(此步骤不需要?疑问一下)

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*

像我先前的安装路径为/usr/local/opencv3.2.0, 该行指令可直接变为

sudo rm -r /usr/local/opencv3.2.0

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

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

相关文章

Ecosmos携手第二十六届高交会,开启元宇宙展会新纪元

2024年11月14日至16日&#xff0c;第二十六届中国国际高新技术成果交易会&#xff08;简称“高交会”&#xff09;将在深圳国际会展中心盛大举行。 本届高交会以“科技引领发展 产业融合聚变”为主题&#xff0c;展览面积达40万平方米&#xff0c;将设置22个专业展&#xff0c;…

奇瑞汽车:降阶模型在新能源汽车热管理仿真上的应用

随着新能源汽车的发展&#xff0c;对仿真技术的要求也越来越高。那么奇瑞汽车利用降阶模型在新能源汽车热管理仿真上做了哪些应用呢&#xff1f;本次内容主要从四个方面展开介绍&#xff1a; 1、 奇瑞汽车简介&#xff1b; 2、 热管理降阶模型开发的背景&#xff1b; 3、 高低…

【NLP-06】词形还原(Lemmatization)深度解析与实践

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

卖三蹦子的wordpress模板

Tricycle三奔子wordpress模板 卖三轮的跨境电商B2B产品展示型网站wordpress模板&#xff0c;助力二大爷的三奔子卖向全球&#xff0c;让在中国遍地热销的三蹦子在海外也大卖. https://www.jianzhanpress.com/?p8178

Java | Leetcode题解之第535题TinyURL的加密与解密

题目&#xff1a; 题解&#xff1a; public class Codec {private Map<Integer, String> dataBase new HashMap<Integer, String>();private Random random new Random();public String encode(String longUrl) {int key;while (true) {key random.nextInt();i…

NFTScan Site:以蓝标认证与高级项目管理功能赋能 NFT 项目

自 NFTScan Site 上线以来&#xff0c;它迅速成为 NFT 市场中的一支重要力量&#xff0c;凭借对各类 NFT 集合、市场以及 NFTfi 项目的认证获得了广泛认可。这个平台帮助许多项目提升了曝光度和可见性&#xff0c;为它们在竞争激烈的 NFT 市场中创造了更大的成功机会。 在最新更…

保研考研机试攻略:python笔记(2)

&#x1f428;&#x1f428;&#x1f428;宝子们好呀&#xff0c;今天我们继续来学习N诺提供的python笔记&#xff0c;fighting&#xff01;( •̀ ω •́ )✧ 对这个系列感兴趣的宝子欢迎关注保研考研机试攻略专栏哦 ~ 目录 &#x1f428;&#x1f428;&#x1f428;4进制转…

【动手学电机驱动】 STM32-FOC(2)STM32 导入和创建项目

STM32-FOC&#xff08;1&#xff09;STM32 电机控制的软件开发环境 STM32-FOC&#xff08;2&#xff09;STM32 导入和创建项目 STM32-FOC&#xff08;3&#xff09;STM32 互补 PWM 输出 STM32-FOC&#xff08;4&#xff09;IHM03 电机控制套件介绍 STM32-FOC&#xff08;5&…

【力扣专题栏】字母异词分组,如何利用强大的容器(unordered_map)解决该问题?

题解目录 1、题目描述解释2、算法原理解析3、代码编写 1、题目描述解释 2、算法原理解析 3、代码编写 class Solution { public:vector<vector<string>> groupAnagrams(vector<string>& strs) {//创建哈希表unordered_map<string,vector<string&g…

vscode clangd for cuda 插件配置

这里写目录标题 1. 下载插件clangd,并且安装server到host2. 配置3. 安装调试插件 1. 下载插件clangd,并且安装server到host 步骤 extension下载 altshiftp, 下服务&#xff0c;如果下不下来请考虑用&#x1fa9c; 下载好后check一下&#xff0c;检查是否正常 正常的标志 注意…

Oracle 11g DataGuard GAP处理

1 说明 在Oracle Data Guard中&#xff0c;GAP是指在备库无法接收到一个或多个来自主库的归档日志文件时发生的情况&#xff0c;会导致数据保护和实时数据复制的能力受到影响。 Oracle Data Guard架构日志同步有三个阶段&#xff1a; 日志发送&#xff1b;日志接收&#xff…

2023年编程语言排行榜

随着编程语言的不断发展&#xff0c;跟踪哪些语言处于领先地位至关重要。在这两部分中&#xff0c;我们将深入研究 2023 年排名前 40 的编程语言&#xff0c;并分析它们脱颖而出的原因。 40 种顶级 TIOBE 编程语言 1. Python 受欢迎程度&#xff1a;非常高学习难度&#xff1…

ELK之路第四步——整合!打通任督二脉

ELK之路第四步——整合&#xff01;打通任督二脉 前言1.架构2.下载资源3.整合开始1.分别启动三个es2.启动kibana3.新建filebeat_logstash.yml配置文件4.修改logstash的启动配置文件5.启动logstash6.启动filebeat7.Kibana查看 4.结语 前言 在开始本篇之前&#xff0c;你需要用到…

Verilog实现的莫尔斯电码发生器

莫尔斯或者摩尔斯电码(Morse Code)&#xff0c;发明于1837年(另有一说是1836年)&#xff0c;通过不同的排列顺序来表达不同的英文字母、数字和标点符号&#xff0c;在这里作一简单处理&#xff0c;仅产生点(Dit)和划(Dah)&#xff0c;时长在0.25秒之内为点&#xff0c;超过为划…

vue3 封装aixos

1. Vue3 封装 aixos 并且 使用 aixos 请求数据 npm install axios # 或者 yarn add axios 2. Vue3 封装 aixos 并且 使用 aixos 请求数据 封装 axios可以帮助我们更好地管理 HTTP 请求&#xff0c;例如添加统一的基础URL、请求头、拦截器等功能。 下面是封装 axios的一个示…

在美团外卖上抢券 Python来实现

在美团外卖上抢券的 Python 实现 在如今的互联网时代&#xff0c;自动化脚本已经成为了许多用户生活中不可或缺的工具。尤其是在购物、抢券等场景中&#xff0c;自动化脚本能够帮助我们节省大量的时间和精力。今天&#xff0c;我们将一起探索如何使用 Python 编写一个简单的脚…

【学术论文投稿】探索嵌入式硬件设计:揭秘智能设备的心脏

【IEEE出版】第六届国际科技创新学术交流大会暨通信、信息系统与软件工程学术会议&#xff08;CISSE 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议论文投稿请看&#xff1a;https://ais.cn/u/nuyAF3 目录 引言 嵌入式系统简介 嵌入式硬件设计的组成部分 设…

宝藏虚拟化学习资料大全

最近发现了关于虚拟化的宝藏资料&#xff0c;瑞斯拜&#xff01;原文链接如下&#xff1a; 500篇关于虚拟化的经典资料&#xff0c;含CPU虚拟化&#xff0c;磁盘虚拟化&#xff0c;内存虚拟化&#xff0c;IO虚拟化。 目录 &#x1fa90; 虚拟化基础 &#x1f343; 虚拟化分类&…

qt QStatusBar详解

1、概述 QStatusBar是Qt框架提供的一个小部件&#xff0c;用于在应用程序窗口底部显示状态信息。它可以显示一些固定的文本和图标&#xff0c;并且可以通过API动态更新显示内容。QStatusBar通常是一个水平的窗口部件&#xff0c;能够显示多行文本内容&#xff0c;非常适合用于…

即插即用显著位置注意力spab,涨点起飞

题目&#xff1a;Salient Positions based Attention Network for Image Classification 论文地址&#xff1a;https://arxiv.org/pdf/2106.04996 创新点 提出了基于显著位置的注意力机制&#xff1a;论文提出了一种名为SPAblock的显著位置选择算法(SPS)&#xff0c;通过在注…