如何在Matlab中使用for循环处理大视频并且没有内存错误

2023-12-14

我是 Matlab 处理的新手,我想在“for 循环”(或没有它)中读取和处理一个大视频(超过 200k 帧)。我特别想:

  1. 使用VideoReader阅读视频,
  2. 将视频细分为 n 个纪元,每个纪元 1000 帧,
  3. 处理 1000 帧的每个 epoch,读取:该 epoch 的第一帧,跳过两帧,读取该帧,跳过两帧,依此类推(例如 i=1:3:nFrames),
  4. 考虑到每个纪元我需要将每个“RGB帧”读取转换为im2bw
  5. 转换后,我需要考虑第一个视频帧(“mov(1,1).cdata”)和该纪元内读取的每个帧,进行“corr2”2D互相关,
  6. 将“corr2”的结果存储到向量中。

总而言之,这就是我需要做的。谢谢你们


到目前为止,这是我关于“corr2”的信息:

for frame_ind = 1 : nFrames
  mov(frame_ind).cdata = im2bw(rgb2gray(read(xyloObj,frame_ind)),0.20);      
end

%% Corr2 to compare BW video frames
for frame_ind2 = 1:(frame_ind-1)
    R(frame_ind2)=corr2(mov(1,frame_ind2).cdata,mov(1,frame_ind2+1).cdata);
end

 TF= isnan(R); 
 g=sum(TF);
 f=(length(R)-g);


if (g~=(length(R))) 
  %%If Part has errors 
  disp('"Part_1" has video interferences/noise/problems, see "Testresult.txt" for more information.');
 else 
  %%If Part has not errors  
  displ=strcat('"Part_1" has not video interferences/noise/problems.');
 end

这是我的版本:

mov = VideoReader('movie.avi');
nFrames = mov.NumberOfFrames;

len = 1000;     %# epoch length
step = 3;       %# step size

%# indices of each epoch
indices = bsxfun(@plus, 1:step:len, (0:ceil(nFrames/len-1))'*len);   %#'
indices = num2cell(indices,2);
indices{end}(indices{end}>nFrames) = [];

%# loop over each epoch
corr_coef = cell(size(indices));
for e=1:numel(indices)
    %# read first image in epoch
    img1 = read(mov, indices{e}(1));
    img1 = rgb2gray(img1);            %# instead of im2bw(img1, graythresh(img1))

    %# read rest of images in epoch
    corr_coef{e} = zeros(1,numel(indices{e})-1);
    for f=2:numel(indices{e})
        img2 = read(mov, indices{e}(f));
        img2 = rgb2gray(img2);

        %# compute corr2 between the two images
        corr_coef{e}(f-1) = corr2(img1,img2);
    end
end

元胞数组corr_coef包含每个时期的相关系数,其中每个单元格包含一个向量corr_coef{e}(i) of corr2在第一帧和第(i+1)帧之间。

请注意,如果其中一帧是恒定的(例如全黑),则 2D 相关系数只是 NaN(零除以零)formula‌​)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Matlab中使用for循环处理大视频并且没有内存错误 的相关文章

  • Java 8:并行 FOR 循环

    我听说 Java 8 提供了很多关于并发计算的实用程序 因此我想知道并行给定 for 循环的最简单方法是什么 public static void main String args Set
  • 使用 for 循环填充 python 字典列表

    我试图用 for 循环填充字典列表 但最终结果显示 for 循环填充的最后一个字典覆盖了所有先前字典的值 我尝试调整以下中提出的解决方案 如何使用循环填充 Python 字典 https stackoverflow com question
  • 如何在向量中的所有点之间绘制线?

    我有一个包含二维空间中一些点的向量 我希望 MATLAB 用从每个点到每个其他点绘制的线来绘制这些点 基本上 我想要一个所有顶点都连接的图 你能用情节来做到这一点吗 如果可以 怎么做 一种解决方案是使用该函数为每个点组合创建一组索引MESH
  • Android 从 C++ 端播放原始音频

    我需要能够在 Android 系统的 C 端以自定义文件格式传输音频 我正在致力于移植自定义媒体播放器 并且需要能够打开自定义文件并从中传输音频 这很重要 因为我认为从性能角度来看将整个播放器移植到 JAVA 是不可行的 并且通过 JNI
  • Matlab 一个图上有多个图例 2014b

    我想在一个地块上有多个传说 该解决方案在 2014b 版本之前完美运行 我试图弄清楚如何使用手柄优雅地制作它 但到目前为止还没有成功 欢迎任何想法 2013b 的示例 x 1 50 y1 sin x 2 y2 cos x 2 f figur
  • Chrome 内存/垃圾收集问题

    我在使用 Chrome 时遇到内存 垃圾收集问题 我正在开发一个照片上传网站 该网站允许我的客户使用 HTML5 和文件 API 拖放照片进行上传 因此这在 IE 中不起作用 它仅适用于 Chrome 和 FF 我还没有在 Safari O
  • iOS 如何触发视频退出全屏后继续播放?

    我正在构建一个在 iOS 中播放视频的网站 我有一个在 iOS 中工作的全屏按钮 但是退出全屏时视频会暂停 有谁知道一种方法可以强制视频在退出全屏时继续播放 或者如何设置一个侦听器来触发视频在退出全屏时自动播放 这是我的代码
  • MATLAB 编译器与 MATLAB 编码器

    两者有什么区别 据我了解 MATLAB Compiler将MATLAB代码包装成 exe文件 这样就可以在不安装MATLAB的情况下使用它 并且只需要MCR 除此之外 MATLAB Builder NE 还可以用于生成与 Net 框架一起使
  • Matlab:条形图中缺少标签

    使用 Matlab 2012 和 2013 我发现设置XTickLabel on a bar图表最多只能使用 15 个柱 如果条形较多 则标签会丢失 如下所示 绘制 15 个条形图 N 15 x 1 N labels num2str x d
  • Numpy 相当于 MATLAB 的 hist [重复]

    这个问题在这里已经有答案了 由于某种原因 Numpy 的 hist 总是返回比 MATLAB 的 hist 少 1 个 bin 例如在 MATLAB 中 x 1 2 2 2 1 4 4 2 3 3 3 3 Rep Val hist x un
  • 在matlab中,如何读取python pickle文件?

    在 python 中 我生成了一个 p 数据文件 pickle dump allData open myallData p wb 现在我想在Matlab中读取myallData p 我的Matlab安装在Windows 8下 其中没有Pyt
  • JVisualVM/JConsole 中的 System.gc() 与 GC 按钮

    我目前正在测试处理 XML 模式的概念验证原型 并围绕一个非常消耗内存的树自动机外部库 我已经获得了源代码 构建 我想绘制 真实峰值 堆 随着模式大小的增加 不同运行的内存消耗 使用的指标符合我的目的并且不会影响问题 或者至少是它的合理近似
  • 获取向量幂的有效方法

    我编写了一个代码 在数值上使用勒让德多项式直至某个高 n 阶 例如 case 8 p 6435 x 8 12012 x 6 6930 x 4 1260 x 2 35 128 return case 9 如果向量x太长这会变得很慢 我发现说之
  • 赋值运算符和复制构造函数有什么区别?

    我不明白C 中赋值构造函数和复制构造函数之间的区别 是这样的 class A public A cout lt lt A A lt lt endl The copy constructor A a b The assignment cons
  • 在 Django 模板中使用 forloop.counter 值作为列表索引

    在我的 Django 1 1 1 应用程序中 我在视图中有一个函数 它向模板返回一系列数字和项目列表列表 例如 data item1 item2 item3 item4 item5 item6 item7 item8 item9 retur
  • 使用for循环时如何获取前一个元素? [复制]

    这个问题在这里已经有答案了 可能的重复 Python 循环内的上一个和下一个值 https stackoverflow com questions 1011938 python previous and next values inside
  • 如何在 cv2.VideoWriter 中使用 FPS 参数?

    好的 所以我正在制作视频 我想确切地知道如何使用 FPS 参数 它是一个浮点数 所以我假设这是我想要的每帧之间的间隔 你能给个例子吗 我只想知道视频会如何随着 FPS 参数值的变化而变化 因为我制作的视频现在太快了 谢谢 确实只是这样 fr
  • MATLAB - 通过垂直连接子矩阵重新排列矩阵

    我在执行以下任务时遇到问题 假设一个 3x6 矩阵 A 0 2787 0 2948 0 4635 0 8388 0 0627 0 0435 0 6917 0 1185 0 3660 0 1867 0 2383 0 7577 0 6179 0
  • 从迭代器外部将 StopIteration 发送到 for 循环

    有几种方法可以打破一些嵌套循环 他们是 1 使用中断 继续 for x in xrange 10 for y in xrange 10 print x y if x y gt 50 break else continue only exec
  • 堆栈是向上增长还是向下增长?

    我在 C 中有这段代码 int q 10 int s 5 int a 3 printf Address of a d n int a printf Address of a 1 d n int a 1 printf Address of a

随机推荐