当前位置: 首页 > article >正文

ROS项目里OpenCV版本打架了?保姆级教程教你让OpenCV 3和4在Ubuntu 20.04上和平共处

ROS项目中OpenCV多版本共存实战指南当ROS遇上OpenCV版本冲突机器人操作系统(ROS)开发者们经常遇到一个令人头疼的问题新项目需要OpenCV 4的最新特性而老项目却固执地依赖OpenCV 3的某些接口。这种版本冲突在Ubuntu 20.04上尤为常见因为ROS Noetic默认集成了OpenCV 4.2.0。更糟的是直接替换系统OpenCV版本可能导致其他依赖它的软件包崩溃。版本冲突的典型症状包括编译时出现undefined reference错误运行时提示symbol lookup errorcv_bridge转换图像时发生数据错乱1. 环境准备与依赖安装在开始之前我们需要确保系统具备编译OpenCV所需的所有工具链。打开终端执行sudo apt update sudo apt upgrade -y sudo apt install -y build-essential cmake git pkg-config libavcodec-dev \ libavformat-dev libswscale-dev libatlas-base-dev gfortran \ zlib1g-dev ccache autoconf automake libtool checkinstall对于图像处理相关的依赖还需要sudo apt install -y libjpeg-dev libjpeg8-dev libtiff5-dev \ libjasper-dev libpng-dev libavcodec-dev libavformat-dev \ libswscale-dev libv4l-dev提示如果遇到libjasper-dev安装失败可以尝试添加Ubuntu 16.04的安全源sudo add-apt-repository deb http://security.ubuntu.com/ubuntu xenial-security main sudo apt update sudo apt install libjasper1 libjasper-dev2. 编译安装OpenCV 3.4我们将把OpenCV 3.4安装到独立目录避免影响系统默认的OpenCV 4。首先获取源代码git clone https://github.com/opencv/opencv.git -b 3.4.14 --depth 1 mv opencv opencv3.4.14 cd opencv3.4.14接着获取对应的contrib模块git clone https://github.com/opencv/opencv_contrib.git -b 3.4.14 --depth 1配置编译选项mkdir build cd build cmake -DOPENCV_EXTRA_MODULES_PATH../opencv_contrib/modules \ -DCMAKE_BUILD_TYPERELEASE \ -DWITH_TBBON \ -DWITH_V4LON \ -DCMAKE_INSTALL_PREFIX/usr/local/opencv3.4.14 \ -DBUILD_opencv_vtkOFF \ -DWITH_VTKOFF \ ..常见编译问题解决方案错误信息解决方法Could NOT find PythonLibssudo apt install python-devNo package gstreamer-base-1.0sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-devCould NOT find JNIsudo apt install default-jdkvtkParseOGLExt错误sudo ln -s /usr/lib/x86_64-linux-gnu/libvtkCommonCore-6.3.so /usr/lib/x86_64-linux-gnu/libvtkCommonCore.so编译安装根据CPU核心数调整-j参数make -j$(($(nproc) - 1)) sudo make install3. 构建多版本cv_bridgeROS中的cv_bridge是连接ROS图像消息和OpenCV的桥梁。我们需要为OpenCV 3编译专用版本。首先获取melodic分支的源码git clone https://github.com/ros-perception/vision_opencv.git -b melodic --depth 1 cd vision_opencv/cv_bridge修改CMakeLists.txt在开头添加set(OpenCV_DIR /usr/local/opencv3.4.14/share/OpenCV) set(OpenCV_INCLUDE_DIRS /usr/local/opencv3.4.14/include) set(OpenCV_LIBRARIES /usr/local/opencv3.4.14/lib)找到Python绑定部分修改为if(NOT ANDROID) find_package(PythonLibs) find_package(Boost REQUIRED python) else() find_package(Boost REQUIRED) endif()编译安装到独立目录mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX/usr/local/cv_bridge_melodic .. make -j$(($(nproc) - 1)) sudo make install4. 在ROS项目中切换OpenCV版本现在你可以在CMakeLists.txt中灵活选择OpenCV版本。对于需要OpenCV 3的项目# 在project()声明后添加 set(cv_bridge_DIR /usr/local/cv_bridge_melodic/share/cv_bridge/cmake) set(OpenCV_DIR /usr/local/opencv3.4.14/share/OpenCV) find_package(OpenCV 3.4 REQUIRED) find_package(cv_bridge REQUIRED)对于需要OpenCV 4的项目保持默认即可find_package(OpenCV 4 REQUIRED) find_package(cv_bridge REQUIRED)版本切换技巧使用pkg-config --modversion opencv检查当前OpenCV版本在Python中可以通过cv2.__version__确认加载的版本如果遇到链接错误检查LD_LIBRARY_PATH是否包含正确路径5. 验证多版本共存创建一个测试节点验证两个版本能否和平共处#!/usr/bin/env python import rospy from sensor_msgs.msg import Image import cv2 import sys def test_opencv_version(): print(Python中加载的OpenCV版本:, cv2.__version__) # 测试基本功能 img cv2.imread(test.jpg) if img is not None: print(图像加载成功尺寸:, img.shape) else: print(图像加载失败) if __name__ __main__: try: rospy.init_node(opencv_version_test) test_opencv_version() except rospy.ROSInterruptException: pass在C项目中可以通过以下方式确保链接正确#include opencv2/core/version.hpp #include iostream int main() { std::cout OpenCV版本: CV_VERSION std::endl; return 0; }6. 高级技巧与故障排除性能优化建议使用ccache加速重复编译export CCACHE_DIR/path/to/ccache在CMake中设置-DCMAKE_CXX_FLAGS-marchnative启用CPU特定优化对于嵌入式设备考虑禁用不需要的模块减少体积常见问题排查表问题现象可能原因解决方案运行时找不到库库路径未加入LD_LIBRARY_PATHexport LD_LIBRARY_PATH/usr/local/opencv3.4.14/lib:$LD_LIBRARY_PATH头文件冲突包含路径顺序错误在CMake中确保正确包含路径优先级Python导入错误Python绑定编译问题检查PYTHONPATH并重新编译Python支持多版本管理进阶使用Docker容器隔离不同开发环境通过update-alternatives管理默认OpenCV版本在ROS工作空间中使用catkin config --profile创建不同配置

相关文章:

ROS项目里OpenCV版本打架了?保姆级教程教你让OpenCV 3和4在Ubuntu 20.04上和平共处

ROS项目中OpenCV多版本共存实战指南 当ROS遇上OpenCV版本冲突 机器人操作系统(ROS)开发者们经常遇到一个令人头疼的问题:新项目需要OpenCV 4的最新特性,而老项目却固执地依赖OpenCV 3的某些接口。这种版本冲突在Ubuntu 20.04上尤为常见,因为R…...

B站视频永久保存终极攻略:m4s-converter一键转换全解析

B站视频永久保存终极攻略:m4s-converter一键转换全解析 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 还在为B站视频突然下架而焦虑…...

Flutter网络请求高级指南

Flutter网络请求高级指南 引言 在现代移动应用开发中,网络请求是一个核心功能,几乎所有应用都需要与后端服务器进行通信。Flutter提供了多种网络请求方案,从基础的http包到功能强大的dio库,开发者可以根据自己的需求选择合适的方案…...

告别卡顿!用Unreal 5的Niagara和顶点动画,轻松渲染上万“小兵”

突破性能极限:Unreal 5 Niagara与顶点动画实现万人同屏实战指南 当屏幕上同时出现数百个角色时,帧率骤降是每个UE5开发者都经历过的噩梦。骨骼动画的计算开销、移动组件的性能消耗、DrawCall的堆积,这些问题在大规模群体渲染时会被无限放大。…...

APP兼容性测试前期准备全攻略:筑牢测试根基,保障应用适配无忧

兼容性测试是确保App在不同设备、系统版本和网络环境下稳定运行的关键环节。在正式开始测试之前,充分的准备工作能大幅提升效率与覆盖率。一、明确兼容性测试核心目标与范围首先要清晰界定测试目标,避免测试工作盲目开展。核心目标是验证APP在不同终端、…...

从双11到某省政务平台:信息系统架构的本质思考

从双11到某省政务平台:信息系统架构的本质思考 一、架构不是设计出来的,是长出来的 某电商巨头今天的架构,是业务增长、填坑、拆分、迭代的结果,不是一开始就"神设计"。 核心技术底座大量依赖开源产品(K8s 等…...

从手机全景到安防监控:聊聊图像拼接(Image Stitching)技术在实际项目里的那些坑

图像拼接实战指南:从算法原理到工程避坑 当你在旅游景点举起手机拍摄全景照片时,是否好奇过背后的技术如何将多张照片无缝拼接?当安防监控系统需要将多个摄像头画面整合成全景视图时,工程师们又面临哪些挑战?图像拼接技…...

设备机箱机柜批量生产厂家

设备机箱机柜批量生产厂家怎么选?掌握这些要点不踩坑在现代工业领域,设备机箱机柜生产至关重要,它为各种设备提供保护和支撑,确保设备稳定运行。选择一家合适的设备机箱机柜批量生产厂家,对于企业的生产和发展意义重大…...

Windows Terminal美化避坑指南:手把手解决Oh-My-Posh字体乱码、主题不生效问题

Windows Terminal美化避坑实战:Oh-My-Posh疑难杂症全解析 当你第一次看到别人炫酷的终端界面时,那种心动的感觉我完全理解。但现实往往是骨感的——Nerd Fonts装了半天还是显示乱码,精心挑选的主题死活不生效,环境变量像迷宫一样让…...

TV Bro电视浏览器终极指南:用遥控器轻松掌控大屏上网体验

TV Bro电视浏览器终极指南:用遥控器轻松掌控大屏上网体验 【免费下载链接】tv-bro Simple web browser for android optimized to use with TV remote 项目地址: https://gitcode.com/gh_mirrors/tv/tv-bro 想在智能电视上畅游互联网世界,却苦于遥…...

强力AI填充插件Fillinger:3分钟掌握20倍效率提升的完整指南

强力AI填充插件Fillinger:3分钟掌握20倍效率提升的完整指南 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 还在为Adobe Illustrator中重复繁琐的图案填充而烦恼吗&…...

鼠标滚动优化终极指南:如何让Mac外接鼠标拥有触控板般的顺滑体验

鼠标滚动优化终极指南:如何让Mac外接鼠标拥有触控板般的顺滑体验 【免费下载链接】Mos 一个用于在 macOS 上平滑你的鼠标滚动效果或单独设置滚动方向的小工具, 让你的滚轮爽如触控板 | A lightweight tool used to smooth scrolling and set scroll direction indep…...

从45分钟到5分钟:Brigadier如何彻底改变Mac Boot Camp驱动部署体验

从45分钟到5分钟:Brigadier如何彻底改变Mac Boot Camp驱动部署体验 【免费下载链接】brigadier Fetch and install Boot Camp ESDs with ease. 项目地址: https://gitcode.com/gh_mirrors/bri/brigadier 在混合设备管理成为企业IT新常态的今天,Ma…...

LeetCode 斐波那契搜索题解

LeetCode 斐波那契搜索题解 题目描述 实现斐波那契搜索算法,在一个有序整数数组中查找目标值。 示例: 输入:[11, 12, 22, 25, 34, 64, 90],目标值:22输出:2(目标值在数组中的索引) 解…...

如何快速解密QQ音乐加密文件:qmcdump完整使用指南

如何快速解密QQ音乐加密文件:qmcdump完整使用指南 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否曾经…...

别再让 Agent 盲目“猜”了!揭秘 CareerPilot 如何用 PaddleOCR 打造职业规划的“第一道防线”

大家在聊起 AI Agent(智能体) 时,脑海中浮现的第一个画面是什么? 是一个无所不知的聊天窗口?还是一个能自动写代码的机器人? 在很多人的认知里,Agent 的核心似乎就是“对话”。但在职业规划这…...

200+小说网站一键下载:novel-downloader终极离线阅读解决方案

200小说网站一键下载:novel-downloader终极离线阅读解决方案 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader 在数字阅读时代,你是否曾担心心爱的小说突然消失…...

VRCT:打破VRChat语言壁垒的3大核心功能

VRCT:打破VRChat语言壁垒的3大核心功能 【免费下载链接】VRCT VRCT(VRChat Chatbox Translator & Transcription) 项目地址: https://gitcode.com/gh_mirrors/vr/VRCT 你是否曾在VRChat的国际房间中,因为语言不通而错失结识全球朋友的机会&am…...

终极窗口大小调整神器:WindowResizer让你完全掌控桌面布局

终极窗口大小调整神器:WindowResizer让你完全掌控桌面布局 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为那些固执的应用程序窗口而烦恼吗?有些软件…...

如何快速掌握JetBrains IDE试用期重置工具:面向开发者的完整指南

如何快速掌握JetBrains IDE试用期重置工具:面向开发者的完整指南 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 你是否曾经因为JetBrains IDE试用期到期而被迫中断开发工作?精心配置的开发…...

如何快速配置BaiduPCS-Web:三步实现百度网盘极速下载的完整指南

如何快速配置BaiduPCS-Web:三步实现百度网盘极速下载的完整指南 【免费下载链接】baidupcs-web 项目地址: https://gitcode.com/gh_mirrors/ba/baidupcs-web 还在为百度网盘令人崩溃的下载速度而烦恼吗?你是否经历过下载一个大文件需要数小时甚至…...

7大核心能力深度解析:foo_openlyrics打造foobar2000终极歌词体验的完整指南

7大核心能力深度解析:foo_openlyrics打造foobar2000终极歌词体验的完整指南 【免费下载链接】foo_openlyrics An open-source lyric display panel for foobar2000 项目地址: https://gitcode.com/gh_mirrors/fo/foo_openlyrics 在音乐播放器生态中&#xff…...

2026年项目管理工具推荐!这6款主流软件值得试试​

2026 年,企业数字化协作全面普及,远程办公、跨部门联动、多项目并行已成为团队工作常态。但多数企业仍深陷项目管理困境:任务分工模糊导致相互推诿、进度全靠口头同步频繁遗漏、风险爆发后才被动补救、文档散落在聊天记录与网盘中难以追溯………...

Firefox Reality:如何在VR/AR头显中重新定义你的网页浏览体验?

Firefox Reality:如何在VR/AR头显中重新定义你的网页浏览体验? 【免费下载链接】FirefoxReality A fast and secure browser for standalone virtual-reality and augmented-reality headsets. 项目地址: https://gitcode.com/gh_mirrors/fi/FirefoxRe…...

MIKE IO完全指南:5分钟掌握Python水文数据处理核心技能

MIKE IO完全指南:5分钟掌握Python水文数据处理核心技能 【免费下载链接】mikeio Read, write and manipulate dfs0, dfs1, dfs2, dfs3, dfsu and mesh files. 项目地址: https://gitcode.com/gh_mirrors/mi/mikeio MIKE IO是DHI集团开发的Python开源库&#…...

手把手教你,如何一句话建立嵌入式闭环开发agent的工作流

上一篇介绍完10分钟安装好OpenCode,有的小伙伴下载不到安装的EXE,我已经上传我的资源了,大家可以直接下载 安装好opencode和Python后 1 在自己的电脑下建一个文件夹,名字随意 2 打开opencode添加文件夹作为工程的路径 3 输入提示词&#x…...

微信视频号评论采集:技术原理、逆向分析与工程挑战

文章目录前言1. 通信架构:不只是 HTTP 那么简单1.1 核心链路拆解2. 逆向攻坚:如何搞定 Sign 签名?2.1 常见的逆向手段2.2 采集流程示意3. 工程化落地:稳才是硬道理3.1 别被风控盯上3.2 工程化提效:从自建到平台化4. 红…...

工行科技岗面试官亲述:我们如何在2对1面试中考察应届生的真实能力?

工行科技岗面试官亲述:我们如何在2对1面试中考察应届生的真实能力? 在金融科技快速发展的今天,银行科技岗位的竞争愈发激烈。作为工商银行科技部门的面试官,我每年都要面对数百份应届生简历,如何在短短30分钟的2对1面试…...

批发零售业缺客源?AI 精准对接上下游,获取批量采购询盘

行业痛点分析在当前的批发零售行业中,企业面临着严峻的获客挑战。根据市场调研数据显示,超过60%的批发零售企业在过去一年中经历了客户流失率上升的问题,而其中40%的企业表示新客户的获取成本显著增加。这一现象不仅影响了企业的短期盈利能力…...

如何彻底掌控你的数字记忆:WeChatMsg三步骤实现聊天记录永久保存与智能分析

如何彻底掌控你的数字记忆:WeChatMsg三步骤实现聊天记录永久保存与智能分析 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitH…...