将灰度 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{:});
你需要做两件事:
使用正确的变量名进行循环,即 i
或 I
但不能混用!请注意,i
有一个内置的虚数常数定义,因此您最好使用 I
或完全不同的东西。
您在尝试写入文件时显示不支持包含 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
尝试将一些灰度图像转换为 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{:});
你需要做两件事:
使用正确的变量名进行循环,即
i
或I
但不能混用!请注意,i
有一个内置的虚数常数定义,因此您最好使用I
或完全不同的东西。您在尝试写入文件时显示不支持包含 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