【问题标题】:How to convert a cv::Mat into a sensor_msgs in ros?如何将 cv::Mat 转换为 ros 中的 sensor_msgs?
【发布时间】:2015-01-20 16:54:01
【问题描述】:

我正在尝试将 cv::Mat 转换为 sensor_msgs,以便我可以在 ROS 中发布它。

我的代码是这样的:

while(ros::ok())
        {
                capture >> frame;
                cv::imshow("Preview" , frame);
                cv::waitKey(1);
                //sensor_msgs::Image img_;
                //fillImage(img_ , "rgb8" , frame.rows , frame.cols , 3 * frame.cols , frame);
                //img_header.stamp = ros::Time::now();
                //cv_bridge::CvImagePtr cv_ptr;
                //cv_ptr->image = frame;
                //image_pub_.publish(img_);
                ros::spinOnce();
        }

我尝试了两种可能的解决方案:

[1] 使用 cv_bridge、CvImagePtr 和 toImageMsg(),但 CvImagePtr 报告

assert(px!0) 错误,我猜这意味着我必须初始化 CvImagePtr。

但是不知道怎么初始化;

[2] 使用 fillImage 和 sensor_msgs::Image,

但是fillImage的第六个参数必须是void*而不是Mat*


希望有人能帮助我!

有没有一种有效的方法可以将 cv::Mat(或 IplImage) 转换为 sensor_msgs ?

提前谢谢!

【问题讨论】:

标签: c++ pointers opencv type-conversion ros


【解决方案1】:

使用以下代码

#include <sensor_msgs/Image.h>
#include <sensor_msgs/image_encodings.h>
#include <cv_bridge/cv_bridge.h>

cv::Mat img; // << image MUST be contained here
cv_bridge::CvImage img_bridge;
sensor_msgs::Image img_msg; // >> message to be sent

std_msgs::Header header; // empty header
header.seq = counter; // user defined counter
header.stamp = ros::Time::now(); // time
img_bridge = cv_bridge::CvImage(header, sensor_msgs::image_encodings::RGB8, img);
img_bridge.toImageMsg(img_msg); // from cv_bridge to sensor_msgs::Image
pub_img.publish(img_msg); // ros::Publisher pub_img = node.advertise<sensor_msgs::Image>("topic", queuesize);

【讨论】:

    【解决方案2】:

    我认为最适合你的是阅读 ROS 教程Converting between ROS images and OpenCV images (C++)

    本教程描述了如何通过将 ROS 图像转换为 OpenCV 图像来连接 ROS 和 OpenCV,反之亦然,使用 cv_bridge。包括一个示例节点,可用作您自己节点的模板。

    【讨论】:

      猜你喜欢
      • 2018-07-08
      • 2023-01-14
      • 1970-01-01
      • 2012-10-22
      • 2018-07-17
      • 1970-01-01
      • 2016-08-16
      • 2018-04-16
      • 2011-06-28
      相关资源
      最近更新 更多