主要内容

从ADTF数据文件选择中读取所有数据项

自从R2022a

    描述

    例子

    数据=阅读(streamReader中读取所有数据adtfStreamReader对象streamReader遍历所有流,并以结构数组的形式返回,数据

    例子

    全部折叠

    这个例子展示了如何提取和可视化存储在ADTF DAT文件中的视频流。它还展示了如何将视频流写入视频文件。

    下载示例视频DAT文件。

    downloadURL =“https://ssd.mathworks.com/supportfiles/driving/data/sample_can_video_dat.zip”;dataFolder = fullfile(tempdir,“adtf-video”, filesep);选项= weboptions(“超时”、正);zipFileName =[数据文件夹,“sample_can_video_dat.zip”];folderExists = exists(数据文件夹,“dir”);在临时目录中创建一个文件夹来保存下载的文件。如果~ folderExists mkdir (dataFolder);disp (“正在下载sample_can_video_dat.zip (9.74 MB)…”) websave(zipFileName, downloadURL, options);%提取下载文件的内容。disp (“提取sample_can_video_dat.zip…”) unzip(zipFileName, dataFolder);结束
    下载sample_can_video_dat.zip (9.74 MB)…
    提取sample_can_video_dat.zip……

    创建ADTF文件阅读器对象。

    datFileName = fullfile(数据文件夹,“sample_can_video.dat”);fileReader = adtfFileReader(datFileName)
    fileReader = DataFileName: "C:\Users\latriwal\AppData\Local\Temp\adtf-video\sample_can_video.dat" DescriptionFileName: "" PluginDirectory: "" StreamCount: 2 StreamInfo: StreamIndex StreamName StreamType StartTime EndTime ItemCount SubstreamInfo ___________ __________ ______________ _________ __________ _________ _____________ 1 {'rawcan'} {'UNRESOLVED'} 0秒14.805秒743 {0×1 struct} 2 {'video'} {'adtf/image'} 0秒14.799秒149 {0×1 struct}

    StreamInfo属性,请注意视频流的索引为2。使用选择的作用adtfFileReader对象,以选择要读取的视频流。返回的adtfStreamReader对象具有有关选择的所有信息。

    streamReader = select(fileReader,2)
    streamReader = adtfStreamReader with properties: DataFileName: "C:\Users\latriwal\AppData\Local\Temp\adtf-video\sample_can_video.dat" DescriptionFileName: "" PluginDirectory: "" StreamIndex: 2 StartIndex: 1 EndIndex: 149 CurrentIndexOffset: 0 StartTime: [0×0 duration] EndTime: [0×0 duration] dat账号:149

    的值CurrentIndexOffset是0。这预示着下一个readNext调用将返回第一项。

    预览来自流的第一个图像帧。

    firstFrame = readNext(streamReader);imshow (firstFrame.Data.Item)

    在创建视频之前,请使用重置函数从第一帧开始读取。的值被重置CurrentIndexOffset为0。

    重置(streamReader);流("CurrentIndexOffset = %d\n"streamReader.CurrentIndexOffset)
    CurrentIndexOffset = 0

    创建一个VideoWriter对象,可用于将图像帧写入视频文件。指定帧速率为每秒1帧。

    videoWriterObj = VideoWriter“example_video.avi”);videoWriterObj。帧速率= 1;打开(videoWriterObj);

    使用streamReader对象,逐个遍历选择中的数据项。的hasNext函数确定在增量读取文件时是否还有项需要读取。readNext返回数据项,它基本上是一个包含数据和相关时间戳的结构。在每次迭代中,提取图像帧并将其写入视频文件。

    streamReader.hasNext() streamData = streamReader.readNext();imageFrame = streamData.Data.Item;frame = im2frame(streamData.Data.)项,灰色);writeVideo (videoWriterObj框架);结束

    方法一次读取所有图像帧函数,稍后再对其进行迭代。

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

    关闭视频文件连接。

    关闭(videoWriterObj);关闭所有

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

    implay (“example_video.avi”

    Figure Movie Player包含一个坐标轴对象和其他类型为uiflowcontainer、uimenu、uitoolbar的对象。axes对象包含一个image类型的对象。

    输入参数

    全部折叠

    流阅读器,指定为adtfStreamReader对象。

    输出参数

    全部折叠

    从所有流中选择的所有数据项,作为N——- - - - - -1结构数组。N是选择中的流的数量。每一个元素数据是一个包含以下字段的结构:

    • StreamIndex-数据流的索引。

    • 数据-包含流中所有数据项的结构数组。数组中的每个结构都有这些字段:

      • ChunkTimestamp—数据项写入DAT文件的时间。

      • SampleTimestamp-在源处收集数据项的时间。

      • —数据项。

      • ItemName-存储的结构名

      • IsValid—读操作是否成功标志,保存为逻辑价值。

      • SubstreamIndex—如果数据项属于子流,则为子流索引。

    版本历史

    在R2022a中引入

    Baidu
    map