Преобразование изображения JPEG в оттенках серого в RGB приводит к 9 каналам

Пытаюсь преобразовать некоторые изображения в градациях серого в 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» в своем цикле.

Anton 29.05.2019 08:36

Вы используете заглавную I для циклов. Попробуйте изменить его на нижний регистр i.

cho_uc 29.05.2019 08:38
i для мнимых чисел в MATLAB. Пожалуйста, не заслоняйте встроенное определение i, используя его в качестве имени переменной. Вместо этого измените i на верхний регистр I
Sardar Usama 29.05.2019 08:47

Кажется, что вы пытаетесь "rgb-ise" файл, который вы уже обработали. Я рекомендую проверить размер (img, 3) после прочтения.

Gryphon 29.05.2019 14:56
Применение градиента к изображению с помощью CSS
Применение градиента к изображению с помощью CSS
Здравствуйте, братья и сестры, как дела? Недавно я застрял на применении градиента к изображению. Я применял это много раз, но иногда наши требования...
Получение URL-адреса изображения курса в Moodle с помощью PHP
Получение URL-адреса изображения курса в Moodle с помощью PHP
Moodle - это популярная система управления обучением с открытым исходным кодом, используемая многими учебными заведениями и организациями по всему...
0
4
181
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно сделать две вещи:

  1. Используйте правильное имя переменной для цикла, то есть i или I, но не микс! Обратите внимание, что i имеет встроенное определение мнимой константы, поэтому вам лучше использовать I или что-то другое.

  2. Вы показываете предупреждение для файлов 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" не существует.

Dev 17.06.2019 22:58

Вы можете использовать имя файла (без пути), только если файл находится в текущем каталоге. Как только вы захотите использовать другой путь, вам нужно его указать. Это должно работать: img = imread( fullfile( files(k).folder, files(k).name ) );. Пожалуйста, отметьте этот ответ как принятый, если он решил вашу проблему.

Wolfie 18.06.2019 09:55

Другие вопросы по теме