0

我是 Matlab 和 Kinect 编程的新手。我已经设法通过我的代码的 162 行的第 155 行,但现在我卡住了,希望得到任何帮助。

我正在尝试记录颜色流和深度流,以便以后可以对它们进行图像处理,而不必每次要测试时都进行实时流式传输。我已经管理了颜色流,但深度流似乎更困难。

我收到“使用 hgMovie 时出错。电影 cdata 必须是 uint8 数组类型”

我试过使用 line depthMov=uint8(depthMov); 正如一个论坛所建议的那样,但现在我得到“无法从 struct 转换为 uint8”还有其他建议吗?以下是我尝试使用的代码片段。

    depthVid=videoinput('kinect',2,'Depth_640x480');
    set(depthVid, 'LoggingMode', 'Disk&Memory');
    depthLogfile = VideoWriter('depthlogfile.mj2'), 'Motion JPEG 200');
    depthVid.DiskLogger = depthLogfile;

    triggerconfig(depthVid, 'manual');
    set(depthVid, 'FramesPerTrigger',inf);

    start(depthVid);
    pause(20);
    trigger(depthVid);
    [depthFrameData, depthTimeData, depthMetaData] = getdata(depthVid);
    stop(depthVid)

    depthPlayback=Video('depthlogfile.mj2');

    dFrames=depthPlayback.NumberOfFrames;
    dheight=depthPlayback.Height;
    dWidth=depthPlayback.Width;

    depthMov(1:dFrames)=struct('cdata,zeros(dHeight,dWidth,3,'unit8'),'colormap',[]);

    for k = 1:dFrames
         depthMov(k).cdata=read(depthPlayback,k);
    end

    hf2 = figure;
    set (hf2,'position',[150 150 dWidth dHeight])

    %depthMov = uint(depthMov); % failed conversion

    movie(hf2,depthMov,1,depthPlayback.FrameRate); %Line I am getting the error

感谢您提前提供任何帮助或建议。

4

1 回答 1

0

该变量depthMov是一个结构数组,每一帧的视频数据就是字段cdata

对于您的应用程序,您似乎需要确保其中的数据depthMov.cdata是 uint8。

在您的代码中,您可以在将每个帧分配给depthMov.cdatafor 循环时执行此操作。

尝试这个

 for k = 1:dFrames
     depthMov(k).cdata=uint8(read(depthPlayback,k));
 end

请注意,您的代码中上面的行有,我认为是错字,应该是

depthMov(1:dFrames)=struct('cdata',zeros(dHeight,dWidth,3,'unit8'),'colormap',[]);

有关 matlab 基础知识的更多信息,包括不同的数据类型,请参见此处

于 2013-11-01T13:24:05.443 回答