ROS Kinetic中OpenCV使用
本文主要记录了ROS Kinetic中OpenCV的使用,Kinetic完全安装中本身自带了Opencv3.3.1,因此在ROS中可以直接用ROS自带的Opencv3.3.1,也可以使用自己源码编译的Opencv,区别只是在头文件中包含路径以及CMakeLists.txt的target_link_libraries
里面。 下面分别记录两种:
1. ROS自带的OpenCV使用
在工程中包含头文件
#include <opencv-3.3.1/opencv2/core.hpp>
#include <opencv-3.3.1/opencv/highgui.h>
#include <opencv-3.3.1/opencv2/opencv.hpp>
然后在CMakeLists.txt中需要包含ROS自带的Opencv package,内容如下:
find_package(catkin REQUIRED COMPONENTS
roscpp
OpenCV
nav_msgs
actionlib
actionlib_msgs
move_base_msgs
sensor_msgs
)
include_directories(
include
${catkin_INCLUDE_DIRS}
${OpenCV_INCLUDE_DIRS}
)
target_link_libraries(your_exe_name
${catkin_LIBRARIES}
${OpenCV_LIBRARIES}
)
2.使用自己源码编译的Opencv
在工程中包含头文件
#include <opencv2/core.hpp>
#include <opencv/highgui.h>
#include <opencv2/opencv.hpp>
在CMakeLists.txt中需要包含自己源码编译的Opencv
find_package(catkin REQUIRED COMPONENTS
roscpp
OpenCV
nav_msgs
actionlib
actionlib_msgs
move_base_msgs
sensor_msgs
)
include_directories(
include
${catkin_INCLUDE_DIRS}
${OpenCV_INCLUDE_DIRS}
)
target_link_libraries(your_exe_name
${catkin_LIBRARIES}
${OpenCV_LIBS}
)
下面给出一个完整的CMakeLists.txt供大家参考:
cmake_minimum_required(VERSION 2.8.3)
project(your_project_name)
## Compile as C++11, supported in ROS Kinetic and newer
add_compile_options(-std=c++11)
## 当前节点依赖的包,这里主要是OpenCV
find_package(catkin REQUIRED COMPONENTS
roscpp
OpenCV
nav_msgs
actionlib
actionlib_msgs
move_base_msgs
sensor_msgs
)
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES ros_node_manager
# CATKIN_DEPENDS other_catkin_pkg
# DEPENDS system_lib
)
## 包含的文件夹
include_directories(
include
${catkin_INCLUDE_DIRS}
${OpenCV_INCLUDE_DIRS}
)
##添加你工程中所有的文件
add_executable(your_exe_name
src/your_cpp1.cpp
src/your_cpp2.cpp
include/your_node_name/your_cpp1.h
include/your_node_name/your_cpp1.h
src/main.cpp
)
##添加依赖
add_dependencies(your_exe_name
${${PROJECT_NAME}_EXPORTED_TARGETS}
${catkin_EXPORTED_TARGETS})
## 链接库,这里主要是链接OpenCV_LIBS
target_link_libraries(your_exe_name
${catkin_LIBRARIES}
${OpenCV_LIBS}
)