【发布时间】:2014-09-10 22:39:07
【问题描述】:
所以我有一个相当大的二进制文件,其中包含大约 70 个视频帧的信息。
我使用以下方法将二进制文件读入 MATLAB
fid = fopen('data.binary');
B = fread(fid,'int64');
fclose(fid);
但是变量B 仍然包含大量数据。所以我想知道我们如何拆分变量 B 以便我可以一帧一帧地获取数据。比如说 30 FPS。
这可能吗?
谢谢
PS:像素精度为 uint8,帧大小为 424X512。这是我正在使用的代码:
fid = fopen('C:\KinectData\Depth\Depth_Raw_0.binary');
B = fread(fid,'uint8');
fclose(fid);
B = uint8(B);
Z = B(1:217088)
n = 424; % No. of columns of T
BB = reshape(Z, n,[]);
BB = uint8(BB);
imshow(BB)
但图片还没有完全出现。
【问题讨论】:
-
你知道每一帧的大小吗?除非您知道这是什么,否则不可能重建您的帧序列。另外,每个像素的精度是多少?
uint8?uint16?int64绝对不可能,因为据我所知,对于每像素 64 位的视频没有标准。这是彩色视频还是灰度视频?如果这是颜色,颜色像素是交错的,还是颜色通道被平面分开?在我们/我回答之前,您需要提供更多信息。 -
@rayreng 您好,感谢您的回复。框架的大小为 512x412。该视频是灰度视频。所以我只想把每一帧都当作一张图片,这样我就可以在 MATLAB 上单独处理它。我不太确定像素精度。我使用的代码来自这里:kinectstreamsaver.codeplex.com 页面底部,是的,深度视频来自 Kinect for XBOX 之一。
-
好的,我看到了下面的代码。是的,一次可以读取 1 帧,但我不知道这些数据的结构。看起来您正在从单个帧中的多个流中读取。此外,您引用的代码看起来像是在尝试读取四元数数据,而不是深度数据。你能澄清一下吗?
-
我引用的代码试图给出关节坐标的输出。但是,我对此并不真正感兴趣。我只想处理囚犯对象的深度图像。所以不是 fid = fopen('C:\KinectData\Skel\liTimeStamp.binary');我只是使用 fopen('C:\KinectData\Depth_data.binary') ,它只包含深度数据,没有其他内容。
-
@rayeng 再次嗨。我现在明白你在说数据类型。所以像素精度是 uint8 而不是 int64,每帧分辨率是 424X512。所以这是我使用的代码:查看编辑。再次感谢您的帮助!
标签: matlab image-processing computer-vision signal-processing kinect