gpt4 book ai didi

c++ - 如何将 cv::Mat 转换为 ros 中的 sensor_msgs?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:18:45 26 4
gpt4 key购买 nike

我正在尝试将 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?

提前致谢!

最佳答案

使用下面的代码

#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);

关于c++ - 如何将 cv::Mat 转换为 ros 中的 sensor_msgs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27080085/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com