ROS cv_bridge C++ 字符串中的 ImagePtr 转换

ROS cv_bridge ImagePtr conversion in c++ string

本文关键字:ImagePtr 转换 字符串 C++ cv bridge ROS      更新时间:2023-10-16

下面是来自 ros 订阅者节点的代码片段,其中视频图像帧根据主题订阅并显示。根据我的要求,cv_ptr->图像需要转换为c ++字符串,以便我可以从中创建字节数组(向量(。

void imageCb(const sensor_msgs::ImageConstPtr& msg)
{
    cv_bridge::CvImagePtr cv_ptr;
    try
    {
      cv_ptr = cv_bridge::toCvCopy(msg, enc::BGR8);
    }
    catch (cv_bridge::Exception& e)
    {
      ROS_ERROR("cv_bridge exception: %s", e.what());
      return;
    }
    if (cv_ptr->image.rows > 60 && cv_ptr->image.cols > 60)
      cv::circle(cv_ptr->image, cv::Point(50, 50), 10, CV_RGB(255,0,0));
    cv::imshow(WINDOW, cv_ptr->image);
    cv::waitKey(3);
}

基本上我正在寻找在 c++ 字符串中转换cv_ptr>图像帧缓冲区的 API。根据主题订阅图像后,我需要在字节数组中转换相同的图像,以便它可以插入 activemqcpp 生产者中,因为其他末端 activemqjava 订阅者期望以字节流格式相同。

string img_string = (copy operation) cv_ptr->image;// Not sure how to copy this buffer in c++ string
vector <unsigned char> vec(img_string.begin().img_string.end());

以下是根据 cv_bridge.h 文件的类规范。

class CvImage;
 typedef boost::shared_ptr<CvImage> CvImagePtr;
 typedef boost::shared_ptr<CvImage const> CvImageConstPtr;
 class CvImage
 {
 public:
 std_msgs::Header header; 
 std::string encoding;    
 cv::Mat image;           
 sensor_msgs::ImagePtr toImageMsg() const;
   void toImageMsg(sensor_msgs::Image& ros_image) const;
   typedef boost::shared_ptr<CvImage> Ptr;
   typedef boost::shared_ptr<CvImage const> ConstPtr;
};

任何人都可以建议如何在 roscpp 中实现相同的目标吗?

如此处所述 http://docs.opencv.org/3.1.0/d3/d63/classcv_1_1Mat.html#a4d33bed1c850265370d2af0ff02e1564 OpenCV的Mat类已经将图像数据存储为无符号字符数组。

cv_ptr->image的类型已经cv::Mat.

您需要做的就是访问其内容,例如cv_ptr->image.data