我正在尝试将图像文件加载到Mat Lab中,并将它们全部保存为设置速度的动画.GIF。我尝试使用imread()加载它们,并使用rgb2ind()映射它们,然后使用网站上给定的imwrite()代码保存,并将它们附加到文件中,尝试使用rgb2ind()时出现错误,说我需要我尝试各种操作时使用uint8数组或3Duint8数组。
%arg 1 number of inputs
%arg 2 is speed
%arg[] files
function main(varargin)
num = str2num(varargin{1});
speed = str2double(varargin{2});
for i=1:num
a = imread(varargin{i+2});
[A map] = rgb2ind(a,256);
if i==1
imwrite(A,map,'new.gif', 'gif','LoopCount',65535,'DelayTime',speed)
else
imwrite(A,map,'new.gif', 'gif','WriteMode','append','DelayTime',speed)
end
end
最有可能您将灰度作为输入图像传递到rgb2ind
。
正确用法示例:
I = imread('peppers.png');
[A, map] = rgb2ind(I, 256);
以上样本以RGB格式加载图像,并且没有错误(peppers.png
是RGB图像)。
给出错误消息的示例:
I = imread('cameraman.tif');
[A, map] = rgb2ind(I, 256);
以上代码的结果:
使用cq时出错第一个输入必须是3-D uint8数组。
rgb2ind中的错误(第93行)[map,X] = matlab.images.internal.cq(RGB,m);
错误的原因是cameraman.tif
是灰度图像(而不是RGB)。
快速解决方案是将灰度图像转换为RGB格式。通过将灰度复制三次(将所有像素创建为R = G = B的RGB图像)来完成将灰度转换为RGB的操作。
这里是一个代码示例,它检查图像是否为灰度格式,并在需要时转换为RGB:
I = imread('cameraman.tif');
%Check if I is Grayscale
if (size(I, 3) == 1)
%Convert Grayscale to RGB by duplicating I three times.
I = cat(3, I, I, I);
end
[A, map] = rgb2ind(I, 256);
以上代码已成功执行。