Python: при чтении и сохранении изображения цвет меняется

Я пробовал загружать и сохранять изображения с помощью python, используя cv2, PIL, scipy, но сохраненное изображение имеет немного другой цвет по сравнению с оригиналом.

Я загружаю и сохраняю формат tif, поэтому не ожидаю изменения цвета.

ссылка на изображение, которое я использую: https://data.csail.mit.edu/graphics/fivek/img/tiff16_c/a0486-jmac_MG_0791.tif

разница между загруженным и сохраненным изображением:

вы можете помочь мне понять, что я делаю не так? почему цвет меняется?

Обновить: проблема в том, что изображение имеет цвет prophoto rgb. кто-нибудь знает, как я могу преобразовать пакет изображений из prophoto rgb в rgb?

Благодарность, йоав

Опция 1:

img = imread(file_name)
imsave('imread.tif', img)

вариант 2:

img = cv2.imread(file_name)
cv2.imwrite('cv2.tif', img)

вариант 3:

img = Image.open(file_name)
img.save('pil.tif')

Перед сохранением можно вывести изображение на экран и посмотреть, изменятся ли тогда цвета.

Wazaki 30.12.2018 12:25

К сведению: вы также можете попробовать использовать tifffile.

Warren Weckesser 30.12.2018 20:10

тот же результат с tifffile с кодом: image = tiff.imread (file_path) tiff.imsave ('tifffile.tif', image)

Yoav Chai 30.12.2018 20:45

изменение цвета при отображении изображения (без сохранения, только загрузка). я использовал: plt.imshow (img, interpolation = 'ближайший') plt.show ()

Yoav Chai 30.12.2018 20:46
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
1 110
1

Ответы 1

I считать OpenCV больше интересуется компьютерным зрением, то есть обнаружением и измерением объектов и т. д., Чем печатью или высококачественным воспроизведением, редактированием и печатью изображений, поэтому он в значительной степени игнорирует профили ICC. Если кто знает лучше, я рад, что меня поправят.

Вы можете использовать ImageMagick для преобразования изображений из одного формата в другой, а также для многих, многих других вещей, одна из которых - изменение цветовых профилей. Итак, я думаю, если вы перейдете в этот сайт и загрузите профиль sRGB (я выбрал первый с "предпочтение" в его имени) и сохраните его как sRGB.icc, вы можете изменить одно из ваших изображений ProPhoto на обычное изображение sRGB с помощью следующей команды в Терминале:

convert input.tif -profile sRGB.icc output.tiff

Попробуйте и посмотрите, работает ли это. Если это так, сделайте копию ваших изображений и на копии вы можете запустить mogrify, чтобы сделать все за один раз - будьте осторожны и сделайте копию, как я предлагаю, потому что она очень быстро изменит все ваши изображения ...

magick mogrify -profile sRGB.icc *tif

Вы можете увидеть встроенный профиль и множество другой информации об изображении, используя команду identifyImageMagick:

magick identify -verbose OneOfYourImages.tiff

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