matlab中如何将3D数组直接转换为视频

问题描述

我有一个维度为 600x600x28 的 3D 矩阵,其最后一个索引是帧数,并希望将其转换为视频文件。正如您在下面的代码中看到的,我将数组转换为大小为 600X600X3X28 的 4D 矩阵,以使其与 WriteVideo 格式兼容。但我不知道为什么输出视频是空的!

Orig = randi([1 1000],600,28);

x = uint8(255 * mat2gray(Orig));
map=jet;

for i=1:size(x,3)
x_all(:,:,i) = ind2rgb(x(:,i),map);
end

x_all = uint8(x_all);
v = VideoWriter('myvideo');
open(v);
writeVideo(v,x_all);
close(v)

解决方法

您不必将视频转换为 RGB,您可以创建灰度视频。

示例:

x = randi([0,255],600,28,'uint8');
v = VideoWriter('myvideo_grayscale.avi','Grayscale AVI');
open(v);
writeVideo(v,x);
close(v)

您获得黑色视频的原因是 ind2rgb 返回范围为 [0,1] 的值,并且在转换为 uint8 时:x_all = uint8(x_all);,所有值都是 {{1 }} 和 0(而不是范围 [0,255])。

创建彩色视频的示例:

1

如果您实际上得到的是一个空的视频文件(不仅仅是黑色视频),则说明您的设置有问题。