ROS ImagePtr与图像编辑

ROS ImagePtr与图像编辑,image,compilation,ros,Image,Compilation,Ros,我正在尝试创建一个发布一个自定义消息,其中包含两个图像。以下是自定义消息文件: Header header sensor_msgs/Image leftimage sensor_msgs/Image rightimage 下面是我尝试使用自定义消息通过ROS发布立体相机图像的文件: sensor_msgs::ImagePtr leftmsg; sensor_msgs::ImagePtr rightmsg; leftmsg = cv_bridge::CvImage(std_msgs::Heade

我正在尝试创建一个发布一个自定义消息,其中包含两个图像。以下是自定义消息文件:

Header header
sensor_msgs/Image leftimage
sensor_msgs/Image rightimage
下面是我尝试使用自定义消息通过ROS发布立体相机图像的文件:

sensor_msgs::ImagePtr leftmsg;
sensor_msgs::ImagePtr rightmsg;
leftmsg = cv_bridge::CvImage(std_msgs::Header(), "mono8", leftframe).toImageMsg();
rightmsg = cv_bridge::CvImage(std_msgs::Header(), "mono8", rightframe).toImageMsg();
stereo.leftimage = leftmsg;
stereo.rightimage = rightmsg;
stereo_pub.publish(stereo);
但是,我在制作catkin时遇到以下编译错误:

    error: no match for ‘operator=’ (operand types are ‘duo_cam::Stereo_<std::allocator<void> >::_leftimage_type {aka sensor_msgs::Image_<std::allocator<void> >}’ and ‘sensor_msgs::ImagePtr {aka boost::shared_ptr<sensor_msgs::Image_<std::allocator<void> > >}’)
            stereo.leftimage = leftmsg;
                             ^
    note: candidate is:
    In file included from /opt/ros/indigo/include/image_transport/publisher.h:39:0,
             from /opt/ros/indigo/include/image_transport/image_transport.h:38,
    sensor_msgs::Image_<std::allocator<void> >& sensor_msgs::Image_<std::allocator<void> >::operator=(const sensor_msgs::Image_<std::allocator<void> >&)
     struct Image_
            ^
错误:“运算符=”不匹配(操作数类型为“duo_-cam::Stereo::_-leftimage_-type{aka sensor_-msgs::Image}”和“sensor_-msgs::ImagePtr{aka boost::shared_-ptr}”)
stereo.leftimage=leftmsg;
^
注:候选人为:
在/opt/ros/indigo/include/image_transport/publisher.h:39:0中包含的文件中,
from/opt/ros/indigo/include/image_transport/image_transport.h:38,
传感器\ msgs::图像\传感器\ msgs::图像\运算符=(常量传感器\ msgs::图像&)
结构映像_
^
我如何纠正这个问题?我已经在使用toImageMsg()函数,我在网上看到该函数将ImagePtr转换为图像,因此不确定出了什么问题。非常感谢您的帮助

根据
toImageMsg
的签名

sensor_msgs::ImagePtr toImageMsg() const;
也就是说,它不会将
ImagePtr
转换为
Image
CvImage
用于将OpenCV图像转换为ROS图像)。您将
leftmsg
rightmsg
声明为
ImagePtr
;如果
toImageMsg
将返回
Image
,这将不起作用

要获取
ImagePtr
图像
,只需取消引用指针即可。以下方面应起作用:

stereo.leftimage = *leftmsg;
stereo.rightimage = *rightmsg;