用matlab从rosbag文件里读取rbg图片和depth图片

本文详细介绍如何使用ROS系统配合Realsense435i相机采集RGBD图像,并利用Matlab进行bag文件的读取与处理。包括设置RVIZ、记录图像、读取bag文件、提取图片与深度图的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

情景介绍

初学ros和linux,小白之路太艰辛,所以尽量详细记录下一步步的操作,防止自己忘记,也便于查错,大牛看见了也请指点一下。
电脑系统是linux 16.04, 相机是realsense 435i, 用来记录rgbd信息的是ros这个系统

利用ros记录rgbd图像
首先在terminal中输入

roslaunch realsense2_camera rs_camera.launch align_depth:=true

在新的第二个terminal中输入

rosrun rviz rviz

在rviz中设置
fixed frame ->camera_link
add->by topic->sensor_msgs/Image

打开第三个terminal:

rosbag record -O rgb /camera/color/image_raw

视频记录结束后,在terminal1 ,terminal2和terminal3中都输入
Ctrl+c

然后就在项目运行的对应的文件夹中找到了相应的bag文件,在这里命名为‘rgb.bag’

matlab下读取image

文章中的matlab安装在window系统中

在这里插入图片描述

用matlab读取bag文件前,调整matlab的目录到bag存在的文件夹,文中rgb.bag存在D:/bagfile中

用matlab读取bag文件

bag = rosbag('rgb.bag');

从bag文件中读取相应的topic,就是在rviz中记录的topic ”sensor_msgs/Image“

rgb_message=select(bag,'MessageType','sensor_msgs/Image');

提取视频

data=readMessages(rgb_message);

从一系列图片中提取单帧图片,这里只取第一幅图

image_n=data{1,1};

如果取第i副图,请用下面的语句

image_n=data{i,1};

在这里插入图片描述

image_n并不是图片,而是一个struct,里面报刊了MessageTyoe,Header,Height等等
为了转化为图片 用matlab自带的函数"readImage"

image_chen_show = readImage(image_n);

在这里插入图片描述
上图可以看见,用readImage得到的结果是一个480乘以640乘以3的rgb图片
用imshow把图片显示出来

figure;imshow(image_chen_show,[]);

在这里插入图片描述
成功提取图片并显示

有不对之处请赐教

附加如何从rosbag文件中提取深度图的matlab代码
要把depth的信息转换成uint16格式的信息
得到的depth图像就是以mm为单位的图片了
可以在真实的世界中做一些事情

close all; clear all; clc

bag_name = 'wood_28.bag';
bag = rosbag(bag_name);
bSel = select(bag, 'Topic', 'camera/aligned_depth_to_color/image_raw');
msgStructs = readMessages(bSel, 'DataFormat', 'struct');

depth_u16 = reshape(typecast(msgStructs{1}.Data, 'uint16'), 640, 480)';
imshow(depth_u16, [])
imwrite(uint16(depth_u16), './example.png')

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值