微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。