You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MATLAB中预分配存储视频处理后图像的数组?

在MATLAB中存储处理后的视频帧并生成新视频的解决方案

嘿,我完全懂你在C语言里用指针数组存帧的思路,在MATLAB里其实有几种非常贴合需求的实现方式,帮你搞定预分配存储和后续视频生成的问题:

1. 预分配三维数组(最适合固定尺寸帧的场景)

因为你的每帧都是固定的A×B尺寸(这里是128×32),最高效的方式是直接创建一个A×B×n的三维数组,把每帧作为第三维度的一个切片存储,这和C语言里连续内存块的思路类似,访问效率很高:

% 假设A=128,B=32,n是你估算的总帧数,图像是8位无符号类型(根据你的实际类型调整)
frameArray = zeros(A, B, n, 'uint8');

% 逐帧处理并存储
for k = 1:n
    % 这里替换成你的帧读取和处理逻辑,得到processedFrame(128×32的矩阵)
    processedFrame = yourProcessingFunction(readFrame(videoObj));
    
    % 将处理后的帧存入三维数组的对应位置
    frameArray(:,:,k) = processedFrame;
end

2. 元胞数组(类比C语言的指针数组,灵活度更高)

如果后续可能遇到帧尺寸变化的情况,或者你更习惯“数组存指针”的逻辑,MATLAB的元胞数组就是完美替代方案——每个元胞元素可以单独存储一个二维图像矩阵,就像C里的指针指向独立的数组:

% 预分配长度为n的元胞数组
frameCell = cell(1, n);

% 逐帧处理并存储
for k = 1:n
    processedFrame = yourProcessingFunction(readFrame(videoObj));
    frameCell{k} = processedFrame; % 把处理后的帧存入第k个元胞
end

3. 从存储的帧生成新视频

不管用哪种存储方式,生成视频都可以用VideoWriter工具,举个简单的例子:

% 创建VideoWriter对象,指定输出路径和格式(比如MP4)
outputVideo = VideoWriter('processed_video.mp4', 'MPEG-4');
outputVideo.FrameRate = videoObj.FrameRate; % 和原视频帧率保持一致
open(outputVideo);

% 写入所有帧(以三维数组为例)
for k = 1:n
    writeVideo(outputVideo, frameArray(:,:,k));
end

% 如果用元胞数组,就改成writeVideo(outputVideo, frameCell{k});

close(outputVideo);

两种存储方式的小对比

  • 三维数组:内存连续,读写速度快,适合所有帧尺寸、类型统一的场景,是首选方案
  • 元胞数组:更灵活,支持不同尺寸/类型的帧,但内存碎片化程度略高,适合有可变需求的场景

内容的提问来源于stack exchange,提问作者smmr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:50:32