Пытаюсь преобразовать некоторые изображения в градациях серого в 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
для мнимых чисел в MATLAB. Пожалуйста, не заслоняйте встроенное определение i
, используя его в качестве имени переменной. Вместо этого измените i
на верхний регистр I
Кажется, что вы пытаетесь "rgb-ise" файл, который вы уже обработали. Я рекомендую проверить размер (img, 3) после прочтения.
Вам нужно сделать две вещи:
Используйте правильное имя переменной для цикла, то есть i
или I
, но не микс! Обратите внимание, что i
имеет встроенное определение мнимой константы, поэтому вам лучше использовать I
или что-то другое.
Вы показываете предупреждение для файлов JPEG с 9 элементами, которые не поддерживаются при попытке записи файла. Это говорит о том, что вы вслепую использовали 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
Это прекрасно работает. Спасибо. Дополнительный вопрос — если у меня есть файлы в нескольких подпапках, я получаю сообщение об ошибке при использовании img = imread(files(k).name) — как будто он не может прочитать файлы подпапок: ошибка при использовании imread>get_full_filename (строка 516) Файл "img_1.jpg" не существует.
Вы можете использовать имя файла (без пути), только если файл находится в текущем каталоге. Как только вы захотите использовать другой путь, вам нужно его указать. Это должно работать: img = imread( fullfile( files(k).folder, files(k).name ) );
. Пожалуйста, отметьте этот ответ как принятый, если он решил вашу проблему.
Вы повторяете «I» и используете «i» в своем цикле.