如何在matlab中将3D数组直接转换为视频
How to convert a 3D array directly to a video in matlab
我有一个维度为 600x600x28
的 3D 矩阵,最后一个索引是帧数,我想将其转换为视频文件。正如您在下面的代码中看到的,我将数组转换为大小为 600X600X3X28
的 4D 矩阵,以使其与 WriteVideo 格式兼容。但我不确定为什么输出视频是空的!
Orig = randi([1 1000],600,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, 600, 28, 'uint8');
v = VideoWriter('myvideo_grayscale.avi', 'Grayscale AVI');
open(v);
writeVideo(v, x);
close(v)
您获得黑色视频的原因是 ind2rgb
returns 值在 [0, 1] 范围内并且转换为 uint8
时:x_all = uint8(x_all);
,所有值是 0
s 和 1
s(而不是范围 [0, 255])。
创建彩色视频的示例:
Orig = randi([1 1000],600,600,28);
x = im2uint8(mat2gray(Orig));
map = jet(256); % Use colormap with 256 colors (the default is 64).
x_all = zeros(size(x, 1), size(x, 2), 3, size(x, 3), 'uint8'); % Allocate space
for i=1:size(x,3)
x_all(:,:,:,i) = im2uint8(ind2rgb(x(:,:,i), map));
end
v = VideoWriter('myvideo.avi');
open(v);
writeVideo(v,x_all);
close(v)
如果您实际上得到的是空视频文件(不仅仅是黑色视频),则说明您的设置有问题。
我有一个维度为 600x600x28
的 3D 矩阵,最后一个索引是帧数,我想将其转换为视频文件。正如您在下面的代码中看到的,我将数组转换为大小为 600X600X3X28
的 4D 矩阵,以使其与 WriteVideo 格式兼容。但我不确定为什么输出视频是空的!
Orig = randi([1 1000],600,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, 600, 28, 'uint8');
v = VideoWriter('myvideo_grayscale.avi', 'Grayscale AVI');
open(v);
writeVideo(v, x);
close(v)
您获得黑色视频的原因是 ind2rgb
returns 值在 [0, 1] 范围内并且转换为 uint8
时:x_all = uint8(x_all);
,所有值是 0
s 和 1
s(而不是范围 [0, 255])。
创建彩色视频的示例:
Orig = randi([1 1000],600,600,28);
x = im2uint8(mat2gray(Orig));
map = jet(256); % Use colormap with 256 colors (the default is 64).
x_all = zeros(size(x, 1), size(x, 2), 3, size(x, 3), 'uint8'); % Allocate space
for i=1:size(x,3)
x_all(:,:,:,i) = im2uint8(ind2rgb(x(:,:,i), map));
end
v = VideoWriter('myvideo.avi');
open(v);
writeVideo(v,x_all);
close(v)
如果您实际上得到的是空视频文件(不仅仅是黑色视频),则说明您的设置有问题。