将数据提取到matlab空间中在之前的文章写了。
https://blog.csdn.net/weixin_42459037/article/details/82756574
红外、深度、RGB成像均以图像序列的形式保存在了bag包里。
所有的图像数据都糅合成了xxx*1的一维数据,因此要做的就是把这一维数据恢复成二维或三维图像数据。
红外图像为灰度图,提取出来比较方便(视频分辨率为1280*720)
m1=select(bag,'Topic','device_0/sensor_0/Infrared_1/image/data');
data_inf=readMessages(m1);
save_path = strcat('D:\code\Realsense\Infrared\');
for i=1:length(data_inf)
tmp=data_inf{i,1};
tmp2=tmp.Data;
tmp2=(reshape(tmp2,1280,720))';
name = num2str(i);
imwrite(tmp2,strcat(save_path,name,'.png'))
end
提取深度图像的时候遇到了一些麻烦
在界面里,深度显示的模式可以自由切换(黑-白,红-蓝等),在包中显示数据是一个mono16的形式。也就是应该是一个一层的uint16数据
然而实际数据点是1280*720的两倍量,并且形式是uint8,按道理应该是要2个为一组转uint16格式或者设计一个方法转化为指定的色彩变化模式以反应深度。
我这里直接舍弃了多余的那一倍数据,变成了一个1280*720的灰度深度图,感觉还凑合。
彩色图像在原始设置中采用RGB8模式,在数据包中,为连续的3个数据点分别存放R\G\B三个通道的像素值。
转换代码如下:
for i=1:length(data_rgb)
tmp=data_rgb{i,1};
tmp2=tmp.Data;
r=(reshape(tmp2(1:3:end,1),1280,720))';
g=(reshape(tmp2(2:3:end,1),1280,720))';
b=(reshape(tmp2(3:3:end,1),1280,720))';
tmp2=cat(3,r,g,b);
name = num2str(i);
imwrite(tmp2,strcat(save_path,name,'.png'))
end
而3D点云数据似乎不在这个包里?
提取完图片后,用matlab自带的合成视频功能即可合成视频
% file_path = strcat('D:\code\Realsense\RGB\');
file_path = strcat('D:\code\Realsense\Infrared\');
myvideo = VideoWriter('newfile.avi');%初始化一个avi文件
myvideo.FrameRate = 15;
open(myvideo);
for i=1:164%图像序列个数
fname=strcat(file_path,num2str(i),'.png');
frame = imread(fname);
writeVideo(myvideo,frame);
end
close(myvideo);