将灰度JPEG图像转换为RGB会导致9个通道

时间:2019-05-29 06:26:18

标签: image matlab imread

尝试将一些灰度图像转换为RGB(1,1,1)。我有一个大约1500张图像的文件夹,需要使用以下代码批量转换(与单个图像配合使用)

足够有趣,

imwrite(repmat(imread(files(1).name), [1 1 3]),files(1).name)
imwrite(repmat(imread(files(2).name), [1 1 3]),files(2).name)
imwrite(repmat(imread(files(3).name), [1 1 3]),files(3).name)

...(依此类推)

工作正常

files = dir('*.jpeg')
for I=1:length(files)
    imwrite(repmat(imread(files(i).name), [1 1 3]),files(i).name)
    display(i)
end
  

使用writejpg时出错(第46行)   JPEG文件不支持具有9个组件的数据。

     

写入错误(第485行)           feval(fmt_s.write,data,map,filename,paramPairs {:});

1 个答案:

答案 0 :(得分:1)

您需要做两件事:

  1. 使用正确的变量名进行循环,即iI,但不要混合使用!请注意,i具有作为虚数常量的内置定义,因此最好使用I或完全不同的东西。

  2. 在尝试写入文件时,对于不支持9个元素的JPEG显示警告。这表明您盲目地使用repmat将已经是RBG的图像一式三份。

我们可以像这样解决这两个问题:

files = dir('*.jpeg')
for k = 1:length(files)
    img = imread( files(k).name ); % Load the image first
    % Convert greyscale to RBG if not already RGB
    % If it's already RBG, we don't even need to overwrite the image        
    if size(img,3) == 1
        imwrite(repmat(img, [1 1 3]), files(k).name);
    end
    % Display progress
    display(k)
end