目录
tips:编译文件后,可执行文件和被读取的文件最好在同一文件夹内,否则执行时可能出错,尤其是有读取文件的操作时。相对路径的相对是针对编译生成的可执行文件
一、安装OpenCV 3.2.0
安装ROS时,OpenCV也被自动地安装了。我ubuntu版本是18.04,故安装的ROS版本为melodic,安装ROS后,ubuntu系统自动地安装了OpenCV 3.2.0。
若之前没有安装ROS或者OpenCV,则参考文章高翔视觉slam第五讲:opencv版本冲突情况安装3.2+测试代码imageBasics和Opencv3安装踩坑(SLAM十四讲)进行安装
~查看OpenCV版本:
pkg-config opencv --modversion
~查看自己linux中OpenCV的安装位置:
sudo find / -iname "*opencv*"
不区分大小写,会显示所有的opencv文件的位置,如下图所示
可知opencv的安装位置:/usr/include/opencv
二、测试运行例程代码
2.1 配置CMakeLists.txt
cmake_minimum_required( VERSION 2.8 )
#添加C++ 11标准支持
set( CMAKE_CXX_FLAGS "-std=c++11")
project(imageBasics)
#寻找OpenCV库,注意字母大小写,否则会编译出错,出现找不到库的错误提示
find_package( OpenCV REQUIRED)
add_executable(imageBasics imageBasics.cpp)
# 链接OpenCV库
target_link_libraries(imageBasics ${OpenCV_LIBS})
add_executable(undistortImage undistortImage.cpp)
# 链接OpenCV库
target_link_libraries(undistortImage ${OpenCV_LIBS})
2.2 测试例程代码
2.2.1 测试代码imageBasics.cpp:
在ch5/imageBasics目录下打开终端
mkdir build
cd build
cmake .. #..表示上一目录,因为cmakelists文件在上一目录
make
如图所示:
然后再build目录下,文件使用绝对路径
./imageBasics /home/zs/slambook2-master/ch5/imageBasics/ubuntu.png
如图所示:
图像去畸变的程序也可以正常运行 就不展示了。
2.3 双目视觉例程
2.3.1 CMakeLists文件配置
配套的代码如图所示:
find_package(Pangolin REQUIRED)
add_executable(stereoVision stereoVision.cpp)
target_link_libraries(stereoVision ${OpenCV_LIBS} ${Pangolin_LIBRARIES})
编译后,结果出错,错在make这一步,有如下报错:
cmake . .后,有warning,注意分析,是缺少东西 看序号1和2
make后
分析应该是没有找到OpenCV库
故修改配置文件如下:
cmake_minimum_required( VERSION 2.8 ) #新加
find_package(Pangolin REQUIRED)
find_package( OpenCV REQUIRED) #新加查找OpenCV库
set( CMAKE_CXX_FLAGS "-std=c++11") #新加 C++11标准
add_executable(stereoVision stereoVision.cpp)
target_link_libraries(stereoVision ${OpenCV_LIBS} ${Pangolin_LIBRARIES})
再次编译,成功!!
2.4 RGB-D例程测试
原本的cmakelist文件如下:
进行编译:
mkdir build && cd build
cmake ..
make
发现出错误了:
修改配置文件
分析发现是缺少OpenCV库,因为很多未定义的cv的引用
修改后的cmakelist文件如下:
cmake_minimum_required( VERSION 2.8 )
set( CMAKE_CXX_FLAGS "-std=c++11")
find_package( OpenCV REQUIRED) #新加查找OpenCV库
find_package(Pangolin REQUIRED)
find_package(Sophus REQUIRED) #新加的
include_directories(${Sophus_INCLUDE_DIRS})
add_executable(joinMap joinMap.cpp)
target_link_libraries(joinMap ${OpenCV_LIBS} ${Pangolin_LIBRARIES})
target_link_libraries(joinMap Sophus::Sophus) #新加的
成功编译,如下图所示:
完活!!!