iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++基于ros怎么将文件夹中的图像转换为bag包
  • 227
分享到

C++基于ros怎么将文件夹中的图像转换为bag包

2023-07-05 00:07:40 227人浏览 八月长安
摘要

这篇文章主要介绍了c++基于ros怎么将文件夹中的图像转换为bag包的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++基于ros怎么将文件夹中的图像转换为bag包文章都会有所收获,下面我们一起来看看吧。一、前

这篇文章主要介绍了c++基于ros怎么将文件夹中的图像转换为bag包的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++基于ros怎么将文件夹中的图像转换为bag包文章都会有所收获,下面我们一起来看看吧。

一、前期工作创建工作空间

C++基于ros怎么将文件夹中的图像转换为bag包

 二、创建工作包

C++基于ros怎么将文件夹中的图像转换为bag包

C++基于ros怎么将文件夹中的图像转换为bag包

创建完成后,文件夹的格式为:

C++基于ros怎么将文件夹中的图像转换为bag包

三、准备编译文件和代码

3.1 更换编译文件中的内容

将上图中的,CMakeLists.txt文件中的内容,替换为下面的内容

cmake_minimum_required(VERSioN 3.0.2)project(create_bag) ## Compile as C++11, supported in ROS Kinetic and newer# add_compile_options(-std=c++11) ## Find catkin Macros and libraries## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)## is used, also find other catkin packages# 寻找OpenCV库find_package( OpenCV  REQUIRED )# 添加头文件include_directories( ${OpenCV_INCLUDE_DIRS} ) find_package(catkin REQUIRED COMPONENTS  cv_bridge  rosbag  roscpp  rospy  std_msgs) catkin_package(#  INCLUDE_DIRS include#  LIBRARIES imgtobag#  CATKIN_DEPENDS cv_bridge rosbag roscpp rospy std_msgs#  DEPENDS system_lib) ############# Build ############# ## Specify additional locations of header files## Your package locations should be listed before other locationsinclude_directories(# include  ${catkin_INCLUDE_DIRS}  ${catkin_INCLUDE_DIRS}  ${rosbag_INCLUDE_DIRS}  ${OpenCV_INCLUDE_DIRS}) add_executable(node src/torosbag.cpp)target_link_libraries(node  ${catkin_LIBRARIES}  ${PCL_LIBRARIES}  ${rosbag_LIBRARIES}  ${OpenCV_LIBS})

 3.2 准备主程序

leedarson@leedarson-desktop:~/catkin_ws/src/create_bag/src$ touch torosbag.cpp
创建一个cpp的文件夹,cpp文件中的内容为:

#include <string>#include <ros/console.h>#include <rosbag/bag.h>#include <cv_bridge/cv_bridge.h>#include <iOStream>#include <vector>#include <sys/types.h>#include <dirent.h>#include <unistd.h>#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>using namespace std;using namespace cv; void GetFileNames(string path,vector<string>& filenames, string con);void GetFileNamesByGlob(cv::String path,vector<cv::String>& filenames, string con);bool read_images(string path, vector<string> &image_files);int main(int arGC, char **argv){    //输入文件和输出文件路径    string base_dir = "/home/leedarson/catkin_ws/src/create_bag/data/";    string img_dir = base_dir + "img/";    std::cout<<"image path is"<<img_dir<<std::endl;    string output_bag=base_dir +"Human2.bag";    string img_fORMat = ".jpg";//格式    vector<string> img_names;    //GetFileNames(img_dir, img_names,".jpg");    read_images(img_dir, img_names);    cout<<"图片读取完成"<<endl;     cout<<"----"<<endl;     ros::Time::init();    rosbag::Bag bag;    bag.open(output_bag, rosbag::bagmode::Write);    int seq = 0;    vector<string>::iterator it;    for(it = img_names.begin(); it != img_names.end();it++)//todo 之后改成图片数量的多少    {        string tmp = *it;        std::cout<<"tmp path is"<<tmp<<std::endl;        //cout<<tmp<<endl;        //string strImgFile =  img_dir + tmp + img_format;        string strImgFile = tmp;        usleep(200000);//4hz        ros::Time timestamp_ros = ros::Time::now();                // --- for image ---//        cv::Mat img = cv::imread(strImgFile);        if (img.empty())            cout<<"图片为空: "<<strImgFile<<endl;        cv_bridge::CvImage ros_image;        sensor_msgs::ImagePtr ros_image_msg;         ros_image.image = img;        ros_image.encoding = "bgr8";        //cout<<"debug_______"<<endl;        //ros::Time timestamp_ros2 = ros::Time::now();        ros_image_msg = ros_image.toImageMsg();        ros_image_msg->header.seq = seq;        ros_image_msg->header.stamp = timestamp_ros;        ros_image_msg->header.frame_id = "/image_raw";         bag.write("/camera/color/image_raw", ros_image_msg->header.stamp, ros_image_msg);        cout<<"write frame: "<<seq<<endl;        seq++;    }     cout<<"---end---"<<endl;     return 0;} //con:文件格式 form:文件命名形式void GetFileNames(string path,vector<string>& filenames, string con){    DIR *pDir;    struct dirent* ptr;    string filename, format, name, name2;     if(!(pDir = opendir(path.c_str())))        return;    int num=0;    while((ptr = readdir(pDir))!=0)     {        //跳过.和..文件        if(strcmp(ptr->d_name, ".") == 0 || strcmp(ptr->d_name, "..") == 0)            continue;        filename = ptr->d_name;        format = filename.substr(filename.find("."), filename.length());        //name = filename.substr(0, filename.find("."));        name = filename.substr(0, filename.find("."));        cout<<filename<<"\t"<<name<<"\t"<<format<<endl;         if(format == con)//也可以添加对文件名的要求        {            filenames.push_back(name);                        num++;        }            }    std::cout<<"file size of:"<<filenames.size()<<"****"<<num<<std::endl;    closedir(pDir);} //cv::glob(路径,要放置路径下文件定义的容器,false)//复制子字符串substr(所需的子字符串的起始位置,默认值为0 , 复制的字符数目)返回值:一个子字符串,从其指定的位置开始//按图片名升序排列bool read_images(string path, vector<string> &image_files){    //fn存储path目录下所有文件的路径名称,如../images/0001.pngvector<cv::String> fn;    cv::glob(path, fn, false);    size_t count_1 = fn.size();    if (count_1 == 0)    {        cout << "file " << path << " not  exits"<<endl;        return -1;    }    //v1用来存储只剩数字的字符串    vector<string> v1;    for (int i = 0; i < count_1; ++i)    {        //cout << fn[i] << endl;        //1.获取不带路径的文件名,000001.jpg(获取最后一个/后面的字符串)        string::size_type iPos = fn[i].find_last_of('/') + 1;        string filename = fn[i].substr(iPos, fn[i].length() - iPos);        //cout << filename << endl;        //2.获取不带后缀的文件名,000001        string name = filename.substr(0, filename.rfind("."));        //cout << name << endl;        v1.push_back(name);    }    //把v1升序排列    sort(v1.begin(), v1.end(),[](string a, string b) {return stoi(a) < stoi(b); });        string v = ".jpg";    size_t count_2 = v1.size();    for(int j = 0; j < count_2; ++j)    {        string z = path + v1[j] + v;        image_files.push_back(z);//把完整的图片名写回来    }return true;}

四、编译及执行

4.1 编译

C++基于ros怎么将文件夹中的图像转换为bag包

C++基于ros怎么将文件夹中的图像转换为bag包

4.2 执行 

1,首先打开一个终端,输入roscore,启动ros

C++基于ros怎么将文件夹中的图像转换为bag包

 2,打开新的终端,进入工作空间,执行以下语句

leedarson@leedarson-desktop:~/catkin_ws$ source devel/setup.bash
leedarson@leedarson-desktop:~/catkin_ws$ rosrun create_bag node

通过以上操作就可以将文件夹中的图像转换为bag包。

4.3 检测录制的bag包的话题和信息

rostopic list

rostopic echo 

关于“C++基于ros怎么将文件夹中的图像转换为bag包”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“C++基于ros怎么将文件夹中的图像转换为bag包”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网其他教程频道。

--结束END--

本文标题: C++基于ros怎么将文件夹中的图像转换为bag包

本文链接: https://www.lsjlt.com/news/348329.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++基于ros怎么将文件夹中的图像转换为bag包
    这篇文章主要介绍了C++基于ros怎么将文件夹中的图像转换为bag包的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++基于ros怎么将文件夹中的图像转换为bag包文章都会有所收获,下面我们一起来看看吧。一、前...
    99+
    2023-07-05
  • C++版本基于ros将文件夹中的图像转换为bag包
    目录一、前期工作创建工作空间 二、创建工作包三、准备编译文件和代码3.1 更换编译文件中的内容 3.2 准备主程序四、编译及执行4.1 编译4.2 执行 ...
    99+
    2023-01-12
    ros图像转换bag包 ros图像转换
  • C#怎么将Word或Excel文档转换为Html文件
    这篇文章主要介绍“C#怎么将Word或Excel文档转换为Html文件”,在日常操作中,相信很多人在C#怎么将Word或Excel文档转换为Html文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#怎么将...
    99+
    2023-07-02
  • Android中怎么将Bitmap保存为PNG图像文件
    Android中怎么将Bitmap保存为PNG图像文件,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。具体代码如下所示:public static voi...
    99+
    2023-05-30
    android bitmap
  • 怎么在mysql中将bin-log日志文件转换为sql文件
    本篇文章给大家分享的是有关怎么在mysql中将bin-log日志文件转换为sql文件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。查看mysq...
    99+
    2024-04-02
  • python中的txt文件怎么转换为XML
    这篇文章主要介绍了python中的txt文件怎么转换为XML的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python中的txt文件怎么转换为XML文章都会有所收获,下面我们一起来看看吧。txt文件转换为XML...
    99+
    2023-07-04
  • 基于JS怎么将JSON数据转换为TypeScript类型声明的工具
    这篇文章主要介绍“基于JS怎么将JSON数据转换为TypeScript类型声明的工具”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于JS怎么将JSON数据转换为TypeScript类型声明的工具”...
    99+
    2023-07-05
  • html5中怎么将图片的绝对路径转换成文件对象
    这篇文章将为大家详细讲解有关html5中怎么将图片的绝对路径转换成文件对象,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:我们先来理解基本知识点:1. 理解HTML5中的FileList对象与fi...
    99+
    2023-06-09
  • PHP中怎么将数据转换成json格式的文件
    本篇内容主要讲解“PHP中怎么将数据转换成json格式的文件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP中怎么将数据转换成json格式的文件”吧!首先,让我们来了解一下什么是json格式...
    99+
    2023-07-05
  • 怎么在Java项目中利用Servlet将图片上传到指定的文件夹中
    今天就跟大家聊聊有关怎么在Java项目中利用Servlet将图片上传到指定的文件夹中,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。步骤一:上传页面uploadphoto.jsp  需...
    99+
    2023-05-31
    java servlet ava
  • 怎么在Pytorch模型中将读取的pth文件参数转换成numpy矩阵
    怎么在Pytorch模型中将读取的pth文件参数转换成numpy矩阵?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Pytorch给了很方便的读取参数接口:nn....
    99+
    2023-06-06
  • win10桌面图标怎么设置像文件夹中的图标一样显示? 8种显示形式介绍
    Windows10系统桌面图标显示的方式:右键点击空白处- 查看,在【查看】菜单中有:大图标(R)、中等图标(M)和小图标(N)三种方式。如果我们打开文件夹,右键点击空白处 - 查看,在【查看】菜单中图标的显示形式有8种...
    99+
    2023-05-21
    win10 图标
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作