【问题标题】:Playback of recorded kinect depth stream on matlab - cdata not in uint8 type在matlab上播放记录的kinect深度流-cdata不是uint8类型
【发布时间】:2013-11-01 22:44:28
【问题描述】:

我是 Matlab 和 Kinect 编程的新手。我已经设法完成了我的代码的 162 行的第 155 行,但现在我卡住了,希望能提供任何帮助。

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

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

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

    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

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

【问题讨论】:

    标签: matlab kinect record playback uint8t


    【解决方案1】:

    变量depthMov是一个structural array,每一帧的视频数据是字段cdata

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

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

    试试这个

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

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

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

    有关 matlab 基础知识(包括不同数据类型)的更多信息,请参阅 here

    【讨论】:

    • 这太棒了,解决了这个问题,但现在我知道“索引电影帧必须有一个非空的颜色图”我已经尝试查找具有 s = struct(field1, value1,...,fieldN,valueN) 所以我尝试将其更改为 depthMov(1:dFrames)=struct('cdata',zeros(dHeight,dWidth,3,'unit8'),'colormap','gray') ;所以我现在收到错误消息“电影颜色图必须是双数组”,因为我希望它以灰度回放电影。
    • 字符串'gray' 与函数调用gray 返回的内容之间存在差异。有关更多信息,请参阅this 了解有关 matlab 中的基本数据类型的更多信息
    • 此回放被颠倒返回,并且仅以黑白显示。关于为什么会出现这种情况,我有 3 个想法:1)转换为 8 位过程 2)Motion JPEG 2000 格式或 3)颜色图 - 我现在有灰色(256)你有什么想法吗?这个?
    猜你喜欢
    • 2013-11-16
    • 1970-01-01
    • 2014-11-03
    • 2011-09-13
    • 1970-01-01
    • 2014-05-20
    • 2015-06-15
    • 2019-08-12
    • 1970-01-01
    相关资源
    最近更新 更多