Преобразование изображения JPEG в градациях серого в RGB приводит к 9 каналам - PullRequest
0 голосов
/ 29 мая 2019

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

Ошибка в imwrite (строка 485) feval (fmt_s.write, данные, карта, имя файла, paramPairs {:});

1 Ответ

1 голос
/ 29 мая 2019

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

  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
...