WIN10下利用matlab保存RealSense D435 图像\视频

将数据提取到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);

 

你可能感兴趣的:(RealSense,D435)