将.binary文件转换为图像

时间:2015-03-09 15:48:04

标签: matlab image-processing computer-vision kinect

我有一个.binary文件,其中包含来自kinect传感器的深度数据。

我正在尝试浏览.binary文件并在MATLAB中获取实际图像。所以这是我提出的MATLAB程序:

fid = fopen('E:\KinectData\March7Pics\Depth\Depth_Raw_0.binary');
col = 512; %// Change if the dimensions are not proper
row = 424;
frames = {}; %// Empty cell array - Put frames in here
numFrames = 0; %// Let's record the number of frames too
while (true) %// Until we reach the end of the file:
    B = fread(fid, [col row],'ushort=>ushort'); %// Read in one frame at a   time

if (isempty(B)) %// If there are no more frames, get out
    break;
end


 frames{end+1} = B.'; %// Transpose to make row major and place in cell array
numFrames = numFrames + 1; %// Count frame
  imwrite(frames{numFrames},sprintf('Depth_%03d.png',numFrames));
end

%// Close the file    
fclose(fid);
frm = frames{1};
imagesc(frm)
colormap(gray)

以上程序运行正常,但它不会给我任何99以上的图像。 也就是说,我将处理.binary文件,我获得的最后一张图像是Depth_099.png,即使完整的视频有更多。

有谁知道吗? 感谢

1 个答案:

答案 0 :(得分:2)

你没有得到99以上图像的原因是你在格式中指定整数,因为你在文件中读到时正在创建文件名字符串。具体来说,这里:

imwrite(frames{numFrames},sprintf('Depth_%03d.png',numFrames));

%03d.png表示您只指定精确度为 3 的数字,因此999是您获得的最大值。如果超过999,则您文件名的字符也会扩大,例如Depth_1000.pngDepth_124141.png。格式化字符串中的%03d可确保您的号码具有三位精度,数字左侧为零填充,以确保您拥有那么多位数。如果要为文件名保持相同的字符数,一个修复可能会增加精度的位数,如:

imwrite(frames{numFrames},sprintf('Depth_%05d.png',numFrames));

这样,字符串的长度会更长,按照惯例,你将达到'Depth_99999.png'。如果超出此范围,那么您的文件名将相应地增加字符数。如果指定%05d,则保证精度为5位,对相应小于5位的数字进行零填充。

视视频所包含的帧数而定,请相应调整数字。


然而,鉴于您的评论如下......可能只是您只有99帧数据:) ...但我上面提到的精确提示应该是有用的。