读取一系列深度图和彩色图以及它们的位姿

创建三个容器

vector<cv::Mat> colorImgs, depthImgs;    // 彩色图和深度图
    vector<Eigen::Isometry3d> poses;         // 相机位姿

读pose.txt

ifstream fin("/home/linhd/slambook2-master/ch12/dense_RGBD/data/pose.txt");
    if (!fin) {
        cerr << "cannot find pose file" << endl;
        return 1;
    }

boost::format 格式化字符串包含占位符 %s%d%s,分别表示文件夹名称、图像序号和文件扩展名。通过使用fmt % ...构造一个格式化字符串,然后使用.str()来获取生成的文件路径。

for (int i = 0; i < 5; i++) {
        boost::format fmt("/home/linhd/slambook2-master/ch12/dense_RGBD/data/%s/%d.%s"); //图像文件格式
        colorImgs.push_back(cv::imread((fmt % "color" % (i + 1) % "png").str()));
        depthImgs.push_back(cv::imread((fmt % "depth" % (i + 1) % "png").str(), -1)); // 使用-1读取原始图像

        double data[7] = {0};
        for (int i = 0; i < 7; i++) {
            fin >> data[i];
        }
        Eigen::Quaterniond q(data[6], data[3], data[4], data[5]);
        Eigen::Isometry3d T(q);
        T.pretranslate(Eigen::Vector3d(data[0], data[1], data[2]));
        poses.push_back(T);
    }

PCL PointCloud:

PCL PointCloud类型介绍_pcl::pointcloud-CSDN博客

PCL PointCloud 类型介绍
在 PCL 中,PointT 是基本的点的表示形式,包括 PointXYZ、PointXYZRGB、Normal 等,而 PointCloud 则是存储点集的容器。

PointCloud 被定义在 point_cloud 文件中。

一、成员变量
header:包含点云的信息,详见 PCLHeader 类型介绍。

points:保存点云的容器,类型为 std::vector<PointT>。

width:类型为uint32_t,表示点云宽度(如果组织为图像结构),即一行点云的数量。

height:类型为uint32_t,表示点云高度(如果组织为图像结构)。

​ 若为有序点云,height 可以大于 1,即多行点云,每行固定点云的宽度;若为无序点云,height 等于 1,即一行点云,此时 width 的数量即为点云的数量。

is_dense:bool 类型,若点云中的数据都是有限的(不包含 inf/NaN 这样的值),则为 true,否则为 false。

sensor_origin_ :类型为Eigen::Vector4f,指定传感器的采集位姿,用的少,一般不用管。

sensor_orientation_ :类型为Eigen::Quaternionf,指定传感器的采集位姿(方向),用的少,一般不用管。

mapping_ ():类型为boost::shared_ptr<MsgFieldMap>,这是由 ROS 整合推动的。用户不需要访问映射。

以上成员变量,黑体加粗的比较重要,要了解它们的含义。

typedef pcl::PointXYZRGB PointT;//定义一个点
    typedef pcl::PointCloud<PointT> PointCloud;//存点
PointCloud::Ptr current(new PointCloud);
current->points.push_back(p);

ROS(机器人操作系统)是一种用于机器人软件开发的开源框架。它提供了一系列工具和库,用于构建机器人系统中的各种功能。在ROS中,我们可以使用相应的包来同时读取深度图和RGB像数据。 要同时读取深度图和RGB,我们可以使用ROS中的像传感器消息。在ROS中,有一个常用的传感器消息类型叫做`sensor_msgs/Image`。这个消息类型可以用来传递像数据。 首先,我们需要在ROS中配置一个用于读取深度图的节点和一个用于读取RGB像的节点。这两个节点将订阅不同的话题,分别接收来自深度相机和RGB相机的像数据。 深度相机节点将发布深度图像到一个特定的话题,我们可以通过订阅这个话题来获取深度图像数据。例如,我们可以使用`rostopic echo`命令来查看深度图像数据。 RGB相机节点将发布RGB像到另一个话题,我们可以通过订阅这个话题来获取RGB像数据。例如,我们可以使用`rostopic echo`命令来查看RGB像数据。 当我们同时运行这两个节点时,我们可以在ROS中编写一个脚本或程序来同时订阅这两个话题,从而实现同时读取深度图和RGB像。在这个脚本或程序中,我们可以使用ROS提供的像传感器消息类型来处理和分析这些像数据。 总的来说,通过配置深度相机节点和RGB相机节点,并订阅相应的话题,我们可以使用ROS来同时读取深度图和RGB像,从而进行机器人感知、视觉SLAM等任务。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值