今天吃什么鸭 2022-12-11 11:46 采纳率: 33.3%
浏览 39
已结题

读取视频帧循环每次往前走300帧

obj = VideoReader(fileName);

numFrames = obj.NumFrames;%帧的总数

%读取帧数据

for k = 1:300  

end
下面是其他计算的代码,得到结果。



for后面的k=1:300是读取视频帧,这个for循环 第一次是读取1:300帧。
怎么能让它每次往前走300帧呢
下一次再运行300:600帧,然后运行下面的代码,保存一次结果。
下一次 600:900帧,然后运行下面的代码,保存一次结果。
下一次 900:1200帧,然后运行下面的代码,保存一次结果

~~~~~~~
一直到3600帧

  • 写回答

4条回答 默认 最新

  • ShowMeAI 2022-12-11 11:53
    关注

    望采纳


    可以使用for循环的嵌套来实现这个需求。代码如下:

    obj = VideoReader(fileName);
    numFrames = obj.NumFrames;%帧的总数
    
    %读取帧数据
    for k = 1:300:numFrames %循环每次往前走300帧
    for i = k : k + 299 %读取每个区间内的帧
    frame = read(obj, i);
    %其他计算代码
    end
    %保存结果
    end
    

    代码在外层循环中定义了每次循环时要读取的帧的区间,然后在内层循环中进行实际的读取操作。每次内层循环完成后,就可以保存计算结果。这样,您就可以通过控制循环次数来读取所有帧并进行相应的计算操作。

    需要注意的是,由于这段代码中定义的循环次数为numFrames / 300,因此如果numFrames不是300的倍数,那么最后一次循环可能会读取到不完整的帧区间。因此,如果希望读取所有帧,那么需要对numFrames取模,使得循环次数为整数。修改后的代码如下:

    obj = VideoReader(fileName);
    numFrames = obj.NumFrames;%帧的总数
    
    %读取帧数据
    for k = 1:300:numFrames - mod(numFrames, 300) %循环每次往前走300帧
    for i = k : k + 299 %读取每个区间内的帧
    frame = read(obj, i);
    %其他计算代码
    end
    %保存结果
    end
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 12月20日
  • 已采纳回答 12月12日
  • 创建了问题 12月11日