ubuntu20.04安装opencv 3.2.0以及cv_bridge踩坑记录

前言

本次安装是在我的双系统下安装的,不同ubuntu版本或者不同硬件平台情况也许会有所不同,仅供参考。

一.opencv 3安装

第一步:

我采用的是github官方代码仓库下载安装的方式,下载的是3.2.0版本(其余版本安装过程类似)
opencv官方链接

第二步:安装依赖项

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无法安装的问题,一般采取的措施都是添加repository的链接后更新软件源,但尝试后还是无法安装该依赖,选择跳过后发现不影响后续安装。具体参见其他大佬的博客。

第三步:正式编译安装

先在下载opencv的文件夹下解压,在/usr/local路径下创建文件夹opencv320之后在终端执行以下指令:

cd ~/Downloads/Applications/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/opencv320 -D ENABLE_PRECOMPILED_HEADERS=OFF .. 
#我的理解是这cmake把opencv的一些库和可执行文件安装到了系统目录下,方便日后程序调用
make -j20 # j后面的数字情况而定
# 安装到前面指定的路径下,无需加DESTDIR=/your/install/path
sudo make install

注意!
我的cmake那一行写法跟大多数教程都不同哈,原因是采用其他人的写法报错,这是我踩坑之后的修改版,具体bug以及解决的链接我放下边了。
报错1

stdlib.h:没有这样的文件或目录

解决方法:编译OpenCV时出错,致命错误:stdlib.h:没有这样的文件或目录
报错2

error PCL requires C++14 or above

解决方法:error: #error PCL requires C++14 or above
报错3

make[2]: *** [modules/python3/CMakeFiles/opencv_python3.dir/build.make:56: modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:21149: modules/python3/CMakeFiles/opencv_python3.dir/all] Error 2
make: *** [Makefile:138: all] Error 2

解决方法:树莓派3b+安装opencv报错/opencv_python3.dir/__/src2/cv2.cpp.o Error 1

二.cv_bridge安装

因为我双系统自带的是opencv4,cmake 优先会找系统下的cv_bridge,我在此处采取的办法和大多数人一样,都是先卸载了系统自带的cv_bridge:

第一步:卸载自带cv_bridge

#根据版本选择哈,我的对应的ros版本是noetic
sudo apt-get remove ros-noetic-cv-bridge

第二步:下载对应ros版本的cv_bridge

cv_bridge官方下载链接

左上角Branches选择对应版本下载即可

第三步:解压安装

先打开cv_bridge对应的CMakeLists,路径:/home/myPC/Downloads/Applications/vision_opencv-noetic/cv_bridge,将图中对应的代码注释,并set之前opencv的安装路径
在这里插入图片描述此时在刚刚那一级路径下(/home/myPC/Downloads/Applications/vision_opencv-noetic/cv_bridge)执行以下操作:

mkdir build # 创建build文件夹
mkdir -p install/install320 #创建install文件夹便于之后的安装
cd build # 进入build文件夹
#注意,一定要加上最后的两个点,***处根据实际需求修改
cmake -D CMAKE_INSTALL_PREFIX=/home/***/Downloads/Applications/vision_opencv-noetic/cv_bridge/install/install320 ..
make -j20 # j后面的数字情况而定
# 安装到前面指定的路径下,无需加DESTDIR=/your/install/path
sudo make install

此时cv_bridge和opencv安装就大功告成了,但还有一步十分关键,那就是如何将这两者的路径添加到工程CMakelists.txt中,我以港科大https://github.com/HKUST-Aerial-Robotics/FIESTA FIESTA建图举例子,在我的设备以及Jetson Xavier上该方法已经成功运行。

a.首先在顶部添加cv_bridge的路径

set(cv_bridge_DIR /home/xyx/Downloads/Applications/vision_opencv-noetic/cv_bridge/install/install320/share/cv_bridge/cmake)  #在find_package前面
find_package(cv_bridge)

b.添加opencv路径:

set(OpenCV_DIR "/usr/local/opencv320")
set(OpenCV_LIBS "/usr/local/opencv320/lib")

c.将opencv的include文件夹包含进来

include_directories(SYSTEM ${OpenCV_INCLUDE_DIRS} /usr/local/opencv320/include)
find_package(OpenCV 3.2)

d.注释原有代码中find_package的cv_bridge

find_package(catkin REQUIRED COMPONENTS
        roscpp
        std_msgs
        nav_msgs
        visualization_msgs
        tf
        #cv_bridge
        )

e.添加cv_bridge的include文件夹路径

include_directories(
    include
    SYSTEM
    ${catkin_INCLUDE_DIRS}
    ${Eigen3_INCLUDE_DIRS}
    ${PCL_INCLUDE_DIRS}
    #${OpenCV_INCLUDE_DIRS} 可以注释,也可不注释
    ${cv_bridge_INCLUDE_DIRS}
)

f.链接cv_bridge的库

target_link_libraries(test_fiesta
        ${catkin_LIBRARIES}
        ${PCL_LIBRARIES}
        ${OpenCV_LIBS}
        ${cv_bridge_LIBRARIES}
        )

此处一定要小心 cv_bridge 对应的库写法!!!
我之前把 LIBRARIES写成了LIBS,找了好几天才发现问题,在此特地记录一下,希望大家以后不要犯同样的错误

最后的CMakeLists.txt就是如下的样子:
在这里插入图片描述

之后就可以正常catkin_make了,source路径即可完美运行。
在这里插入图片描述

新人小徐的第一篇博客,如有侵权,必定删改。同时感谢一路陪伴指导的龙哥。

Peace & Love~

  • 10
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值