一、cv_bridge
cv_bridge是将ROS中的图像信息转化为OpenCV的图像信息,从而使用OpenCV进行图像处理。
二、创建功能包
$ catkin_create_pkg ros_bridge_opencv cv_bridge image_transport roscpp sensor_msgs std_msgs rospy
三、配置CMakeList.txt文件
# 寻找OpenCV库
find_package(OpenCV REQUIRED)
# 添加头文件
include_directories(${OpenCV_INCLUDE_DIRS})
# 生成编译文件
add_executable(bridge src/bridge.cpp)
#链接OpenCV库
target_link_libraries(bridge ${OpenCV_LIBS})
四、在src中创建bridge.cpp
#include <ros/ros.h>
// 用image_transport软件包发布和订阅ROS中的图像
#include <image_transport/image_transport.h>
// 这两个头文件包含了CvBridge类以及与图像编码相关的函数
#include <cv_bridge/cv_bridge.h>
#include <sensor_msgs/image_encodings.h>
// 这两个头文件包含了OpenCV图像处理模块和GUI模块
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
static const std::string OPENCV_WINDOW = "Image window";
class ImageConverter
{
ros::NodeHandle nh_;
image_transport::ImageTransport it_;
// 声明订阅者和发布者对象
image_transport::Subscriber image_sub_;
image_transport::Publisher image_pub_;
public:
ImageConverter()
: it_(nh_)
{
// Subscrive to input video feed and publish output video feed
image_sub_ = it_.subscribe("/camera/rgb/image_raw", 1, &ImageConverter::imageCb,</