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

Converting grayscale JPEG image to RGB leads to 9 channels

尝试将一些灰度图像转换为 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

Error using writejpg (line 46) Data with 9 components not supported for JPEG files.

Error in imwrite (line 485) feval(fmt_s.write, data, map, filename, paramPairs{:});

你需要做两件事:

  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