前言
本次安装是在我的双系统下安装的,不同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路径即可完美运行。
新人小徐的第一篇博客,如有侵权,必定删改。同时感谢一路陪伴指导的龙哥。文章来源:https://www.toymoban.com/news/detail-763299.html
Peace & Love~文章来源地址https://www.toymoban.com/news/detail-763299.html
到了这里,关于ubuntu20.04安装opencv 3.2.0以及cv_bridge踩坑记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!