如何从一组MATLAB图像制作GIF

nwnhqdif  于 2023-02-05  发布在  Matlab
关注(0)|答案(1)|浏览(301)

我有一个数组的值,我把它变成一个彩色图像如下:

my_img = imagesc(my_data(:,:,tidx)); axis off; colormap('default'); c=colorbar; c.FontSize=26; c.FontWeight='bold';

我想知道是否可以循环my_data中的所有索引值并将它们转换为GIF。
我试过这个:

for tidx = 5:64
    my_img = imagesc(my_data(:,:,tidx)); axis off; colormap('default'); c=colorbar; c.FontSize=26; c.FontWeight='bold';
    imwrite (my_img, int2str(tidx)+"_cspattern.png");
end

这给了我这个错误:

Error using imwrite (line 427)
Expected DATA to be one of these types:

numeric, logical

Instead its type was matlab.graphics.primitive.Image.

我查了一下,试了一下this solution

for tidx = 5:64
    my_img = imagesc(my_data(:,:,tidx)); axis off; colormap('default'); c=colorbar; c.FontSize=26; c.FontWeight='bold';
    IMG_to_write = uint8(normalize(my_img, 'range', [0 255]));
    imwrite(IMG_to_write, int2str(tidx)+"_cspattern.png");
end

但这给了我一个错误:

Error using normalize>checkSupportedArray (line 159)
Invalid data type. First argument must be a real numeric or logical array, a table or a timetable.

Error in normalize (line 86)
    checkSupportedArray(A,method,methodType,false);

Error in GenerateFigures (line 18)
    IMG_to_write = uint8(normalize(SavePattern, 'range', [0 255]));

我觉得好像我想多了,因为必须有一个简单的方法来加载我想要的数据,并将其保存为图像或一系列图像。

jfewjypa

jfewjypa1#

imagesc生成一个图形对象,而不是数据数组。它是用来将图像显示为图形,而不是保存到文件中。您需要直接将图像数据与所需的颜色Map表沿着交给imwrite

for tidx = 5:64
    imwrite(my_data(:,:,tidx),parula(),int2str(tidx)+"_cspattern.png");
end

如果要像imagesc那样缩放每个图像以便使用整个颜色范围,则可以手动执行此操作。

for tidx = 5:64
    my_data_slice = double(my_data(:,:,tidx));
    my_data_slice = my_data_slice - min(my_data_slice,[],'all');
    my_data_slice = my_data_slice / max(my_data_slice,[],'all')*255;
    my_data_slice = uint8(my_data_slice);

    imwrite(my_data_slice,parula(),int2str(tidx)+"_cspattern.png");
end

相关问题