CMakeLists和OpenCV

目录

  1. opencv版本指定

  2. CmakeLists指定opencv

  3. 把opencv链接到自己库或者可执行文件

第一部分 opencv版本指定

前言:如果使用sudo apt install ros-melodic-desktop-full安装的ros,那么会默认安装opencv3.2版本到/usr/include,/usr/lib,/usr/share三个目录。但是如果我们从opencv官网源码编译安装的(以最常用的opencv3.4.10为例)opencv会默认安装到usr/local下对应的三个子目录。

此处提醒,不要安装opencv4.0及4.0以上的版本,因为这与ros1不兼容。我们推荐使用opencv3.4.10

ubuntu系统中一般都会安装有pkg-config这个工具,那么派生出来的PKG_CONFIG_PATH一般含有常用的一些库,PKG_CONFIG_PATH其中一个路径是/usr/local/lib/pkgconfig,我们安装opencv后为了方便调用opencv,会在usr/local/lib/pkgconfig下生成一个opencv.pc。所以我们如果直接输出查看opencv的版本,那么就是这个opencv.pc指定的。

ros默认安装的opencv,使用的/usr/lib/x86_64-linux-gnu/pkgconfig下的opencv.pc

第二部分 CmakeLists指定opencv

首先使用set(OpenCV_DIR /usr/share/OpenCV)或者set(OpenCV_DIR /usr/local/share/OpenCV)来分别指定ros自带的opencv和我们自己安装的opencv

其次,我们可以通过两种方式找到opencv的包,

第一种:把opencv作为catkin_library的一部分,以后只需要${catkin_LIBRARIES}链接到目标文件。

find_package(catkin REQUIRED COMPONENTS
  OpenCV
  cv_bridge
  geometry_msgs
  mavros_msgs
  nav_msgs
  roscpp
  rospy
  sensor_msgs
  std_msgs
  tf
  trajectory_msgs
)

第二种:单独寻找opencv的库,但以后使用需要${OpenCV_LIBS}链接到需要的目标文件。

find_package(OpenCV)

第三部分 把opencv链接到自己库或者可执行文件

比如我有自己库,这个库里用到了opencv和cv_bridge,注意:cv_bridge是ros的库,不是opencv下的库。

add_library(mission_lib
         include/mission/ros_related.h
         include/mission/common_usage.h
         lib/mission_core.h
         lib/mission_core.cpp
)

//如果之前opencv添加进catkin,如下
target_link_libraries(mission_lib ${catkin_LIBRARIES})
//如果之前opencv和catkin是分别find_package()的,如下
target_link_libraries(mission_lib ${catkin_LIBRARIES} ${OpenCV_LIBS})
//用自己的库也可以继续生成可执行文件
add_executable(mission_node_gazebo src/mission_node_gazebo.cpp)
target_link_libraries(mission_node_gazebo mission_lib )

更简单的使用是,我要生成自己的可执行文件,这个可执行文件文件用到了opencv和cv_bridge

add_executable(mission_node_gazebo src/mission_node_gazebo.cpp)
target_link_libraries(mission_node_gazebo ${catkin_LIBRARIES} ${OpenCV_LIBS})

你可能感兴趣的:(图像处理,环境配置,ROS使用)