网站开发费用如何记账,铁岭做网站信息,谷歌浏览器下载安装2022,品牌营销增长好牌子推荐在 Ubuntu 20.04 中#xff0c;ROS Noetic 默认安装的 OpenCV 版本为 4.2.0。如果您需要确认系统中已安装的 OpenCV 版本#xff0c;可以使用以下命令#xff1a;
sudo find / -iname *opencv*然而#xff0c;许多开源算法都是基于 OpenCV 3 编写的#xff0…在 Ubuntu 20.04 中ROS Noetic 默认安装的 OpenCV 版本为 4.2.0。如果您需要确认系统中已安装的 OpenCV 版本可以使用以下命令
sudo find / -iname *opencv*然而许多开源算法都是基于 OpenCV 3 编写的如果要修改代码就非常麻烦。另一方面一些程序可能可能又依赖高版本的OpenCV比如4.5版本。这时就需要在系统中安装多个版本的OpenCV。
为了实现多个版本的共存我们希望在不删除自带的 OpenCV 4 的情况下编译安装 OpenCV 3 及其 contrib 库并使得 cv_bridge 能够支持多版本。
本教程将介绍在不影响ROS中自带的 OpenCV 和 cv_bridge 的情况下如何实现多版本 OpenCV 和 cv_bridge 的共存并且将说明如何修改 CMakeLists 文件来找到指定版本的OpenCV和cv_bridge。本教程理论上对Ubuntu版本与ROS版本没有限制并且对安装的OpenCV大版本3或4也没有要求。只需要注意OpenCV 3 的cv_bridge对应为melodic而OpenCV 4则为noetic在下载源码时选择对应版本即可。
0. 安装OpenCV依赖项
首先更新源以确保系统处于最新状态
sudo apt update接着安装所需的依赖项
sudo apt-get install build-essential cmake git pkg-config libavcodec-dev libavformat-dev libswscale-dev libatlas-base-dev gfortran zlib1g-dev ccache autoconf automake libtool checkinstall为了解决依赖问题需要添加新的源。然后安装 libjasper
sudo add-apt-repository deb http://security.ubuntu.com/ubuntu xenial-security main
sudo apt update
sudo apt install libjasper1 libjasper-dev接下来安装常用的图像工具包以及视频 I/O 包
sudo apt-get install libjpeg-dev libjpeg8-dev libtiff5-dev libjasper-dev libpng-dev
sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev1. 编译 OpenCV 3 及其 contrib 库的源代码
接下来需要下载并编译 OpenCV 3 的源代码。可以从官方GitHub下载源代码并按照以下步骤进行编译安装
首先下载 OpenCV 3 的源代码并切换到对应版本
git clone https://github.com/opencv/opencv.git -b 3.4.14
mv opencv opencv3.4.14
cd opencv3.4.14接着下载 OpenCV contrib 模块请注意版本的对应
git clone https://github.com/opencv/opencv_contrib.git -b 3.4.14然后返回到 opencv 目录并创建并进入 build 目录
cd ../
mkdir build
cd build接下来配置 OpenCV 的编译选项
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 \..执行完毕后你大概率会看到编译出现错误
-- Configuring incomplete, errors occurred!
See also /home/user/libraries/opencv3.4.14/build/CMakeFiles/CMakeOutput.log.
See also /home/user/libraries/opencv3.4.14/build/CMakeFiles/CMakeError.log.这里的错误来自于各种各样的依赖项没有找到或者没有安装需要翻看报错信息来确定具体问题。可以百度/谷歌相关关键词比如Could not find xxx查找解决办法这里只列举我遇到的一些依赖项问题
--- Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)
...
No package gstreamer-base-1.0 found
...
looking for ccache --not found
...
-- Could NOT find JNI (missing: JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH)解决方法是安装 Python 相关的开发库、gstreamer 相关库、ccache、OpenBLAS 或者 Atlas 、JNIJava Native Interface……
sudo apt-get install python-dev
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt-get install ccache
sudo apt-get install liblapack-dev liblapacke-dev libopenblas-dev
sudo apt install default-jdk最后可能会遇到关于 vtkParseOGLExt 的错误可以通过复制 vtk7 文件解决
sudo cp ./vtk7 ./vtk完成以上步骤并且确认没有任何依赖性的问题之后可以继续进行编译并安装 OpenCV
make -j12
sudo make install最好不要满线程可能会卡死。可以先用htop看自己电脑最高可以多线程然后适当减少一些编译用的线程数
2. 安装cv_bridge
cv_bridge 是用于在ROS和OpenCV图像之间进行转换的重要工具。在ROS Noetic中默认的 cv_bridge 链接到了 OpenCV 4。为了确保ROS的完整性并且保持 OpenCV 4 的正常使用我们不建议卸载默认的 cv_bridge。
为了额外安装适配于 OpenCV 3 的 cv_bridge首先需要从 cv_bridge 的 GitHub 仓库下载 ros_melodic 版本的 cv_bridgecv_bridge GitHub
下载后进入 vision_opencv-melodic/cv_bridge 目录并修改其中的 CMakeLists.txt 文件有以下两个目的 1将寻找 Boost 的方式改为不区分 Python 版本防止编译时找不到 boost_python3 2添加对自己安装的 OpenCV 3 的路径的设置防止找不到与 OpenCV 版本兼容的配置文件
具体修改方式如下注意修改的是下载的cv_bridge中CMakeLists.txt。 在文件开头添加以下内容
cmake_minimum_required(VERSION 2.8)
project(cv_bridge)# 添加下面的内容
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)在文件中找到以下代码
if(NOT ANDROID)find_package(PythonLibs)if(PYTHONLIBS_VERSION_STRING VERSION_LESS 3)find_package(Boost REQUIRED python)else()find_package(Boost REQUIRED python3)endif()
else()find_package(Boost REQUIRED)
endif()修改为
if(NOT ANDROID)find_package(PythonLibs)find_package(Boost REQUIRED python)
else()find_package(Boost REQUIRED)
endif()完成以上修改后保存并退出 CMakeLists.txt 文件。
接下来需要在 vision_opencv-melodic/cv_bridge 目录中编译 cv_bridge
cd vision_opencv-melodic/cv_bridge
mkdir build
cd build
cmake ..
make -j12最后使用 make install 命令将 cv_bridge 安装到系统中
sudo make install DESTDIR/usr/local/cv_bridge_melodic这样就完成了 cv_bridge 的安装。现在您可以在您的 ROS 系统中同时使用适配于 OpenCV 3 的 cv_bridge 和系统自带的 cv_bridge链接到 OpenCV 4了。
3. 修改ROS包中的CMakeLists.txt来指定OpenCV和cv_bridge版本
最后需要在 ROS 包的 CMakeLists.txt 文件中设置 OpenCV 和 cv_bridge 的链接路径。可以按照以下方式设置
# 在 project(xxx) 后面添加以下两行
set(cv_bridge_DIR /usr/local/cv_bridge_melodic/usr/local/share/cv_bridge/cmake)
set(OpenCV_DIR /usr/local/opencv3.4.14/share/OpenCV)需要注意的是对所有使用了 OpenCV 或者 cv_bridge 的 CMakeLists 都需要进行相应的修改以确保正确链接到指定版本的库。
本教程到此结束。如果在安装过程中遇到任何问题欢迎在评论中提出。