读
描述
中读取所有数据数据
=阅读(streamReader
)adtfStreamReader
对象streamReader
遍历所有流,并以结构数组的形式返回,数据
.
例子
提取视频流从ADTF数据文件
这个例子展示了如何提取和可视化存储在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”)
输入参数
streamReader
- - - - - -流的读者
adtfStreamReader
对象
流阅读器,指定为adtfStreamReader
对象。
输出参数
数据
-所有流中选择的所有数据项
N——- - - - - -1
结构数组
从所有流中选择的所有数据项,作为N——- - - - - -1
结构数组。N是选择中的流的数量。每一个元素数据
是一个包含以下字段的结构:
StreamIndex
-数据流的索引。数据
-包含流中所有数据项的结构数组。数组中的每个结构都有这些字段:ChunkTimestamp
—数据项写入DAT文件的时间。SampleTimestamp
-在源处收集数据项的时间。项
—数据项。ItemName
-存储的结构名项
.IsValid
—读操作是否成功标志,保存为逻辑
价值。SubstreamIndex
—如果数据项属于子流,则为子流索引。
版本历史
在R2022a中引入
MATLAB命令
您点击了与此MATLAB命令对应的链接:
通过在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
你亦可选择下列网址:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家网站没有针对您所在位置的访问进行优化。