主要内容

hasnext

检查ADTF DAT文件选择是否具有下一个数据

    描述

    例子

    旗帜= hasnext(StreamReader返回真的如果由ADTF DAT文件的一个或多个流ADTFStreamReader目的StreamReader,有下一个可用的数据项要读取。否则,它返回错误的

    当从多个流的选择中读取时,如果某些流达到选择标准的末尾,则此功能返回真的只要在至少一个流中有下一个可用的数据项。

    例子

    全部收缩

    此示例显示了如何提取和可视化的视频流,该视频流存储在ADTF DAT文件中。它还显示了如何将视频流写入视频文件。

    下载示例视频DAT文件。

    downloadurl ='https://ssd.mathworks.com/万博1manbetxsupportfiles/driving/data/sample_can_video_dat.zip';datafolder = fullfile(tempdir,'adtf-video',filesep);选项= WebOptions('暂停',Inf);zipfileName = [datafolder,'sample_can_video_dat.zip'];folderexists =存在(datafolder,'dir');%在临时目录中创建文件夹以保存下载的文件。如果〜folderexists mkdir(datafolter);disp('下载sample_can_video_dat.zip(9.74 mb)...')websave(zipfileName,downloadurl,options);%提取下载文件的内容。disp('提取sample_can_video_dat.zip ...')unzip(zipfileName,datafolter);结尾

    创建ADTF文件读取器对象。

    datfileName = fullfile(datafolder,“ sample_can_video.dat”);filereader = adtffilereader(datfileName)
    FILEREADER = DATAFILENAME:“ C:\ users \ Latriwal \ appData \ local \ temp \ adtf-video \ sample_can_video.dat” descriptionfileName:“ plugindirectory:“ plugindirectory:“ plugindirectory:”_________ 1 {'rawcan'} {'un万博1manbetxtupported'} 0 sec 14.805 sec 743 2 {'video'} {'adtf/image'} 0 sec 14.799 sec 149

    来自Streaminfo属性,请注意视频流的索引为2。使用选择功能adtffilereader对象,选择用于阅读的视频流。返回ADTFStreamReader对象具有有关选择的所有信息。

    StreamReader = Select(FileReader,2)
    StreamReader =带有属性的ADTFStreamReader:dataFileName:“ c:\ users \ latriwal \ appData \ local \ local \ temp \ adtf-video \ sample_can_video.dat” descriptionfileName:descriptionfileName:“启动时间:[0×0持续时间]末日:[0×0持续时间]数据载体:149

    请注意,价值CurrentIndexOffset是0。这表示下一个readnext通话将返回第一项。

    从流中预览第一个图像框架。

    firstFrame = readNext(streamReader);imshow(firstframe.data.item)

    在创建视频之前,请使用重置功能可以从第一帧开始阅读。这重置了CurrentIndexOffset到0。

    重置(StreamReader);fprintf(“ currentIndexoffset =%d \ n”,streamReader.currentIndExoffset)
    CurrentIndexOffset = 0

    创建一个VideOwriter您可以用来将图像帧写入视频文件的对象。指定每秒1帧的帧速率。

    VideOwriterObj = VideOwriter(“ example_video.avi”);VideOwriterObj.Framerate = 1;Open(VideOwriterObj);

    使用StreamReader对象,一对一的选择中的数据项迭代。这hasnext函数确定是否有一个项目要读取,因为我们正在逐步读取文件。readnext返回基本上是包含数据和相关时间戳的结构的数据项。在每次迭代中,提取图像框架并将其写入视频文件。

    尽管StreamReader.hasnext()streamData = streamReader.readNext();imageFrame = streamData.data.item;frame = im2frame(streamdata.data.item,灰色);writeVideo(VideOwriterObj,框架);结尾

    另外,您可以使用功能,然后迭代以后。

    alldata = read(streamReader)
    alldata =带有字段的结构:StreamIndex:2数据:[149×1结构]

    关闭视频文件的连接。

    关闭(VideOwriterObj);关全部

    可视化输出文件example_video.avi使用视频查看器

    inmand(“ example_video.avi”

    输入参数

    全部收缩

    流阅读器,指定为ADTFStreamReader目的。

    输出参数

    全部收缩

    文件选择有一个可读取的下一个可用数据项,返回为逻辑1((真的) 或者0((错误的)。

    版本历史记录

    在R2022a中引入