gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:01:04 24 4
gpt4 key购买 nike

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

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

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

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 类已经将图像数据存储为 unsigned char 数组。

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

访问其内容所需要做的一切,如 cv_ptr->image.data

关于c++ - C++字符串中的ROS cv_bridge ImagePtr转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44233803/

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