Цвет становится тусклым: opencv cv2.cv2 imread.imwrite
Я использую модуль OpenCV для чтения и записи изображения. вот код, а ниже изображение, которое я читаю, и второе изображение после сохранения его на диске с помощью cv2.imwrite ().
import cv2
img = cv2.imread('originalImage.jpg')
cv2.imwrite('test.jpg',img)
заметно, что цвета на втором изображении тусклые. Есть ли обходной путь к этой проблеме, или мне не хватает каких-то параметров настройки..?
3 ответов
разница в том, что начальное изображение (слева на диаграмме) имеет прикрепленный ICC-профиль, а второе (справа) - нет.
я получил вышеуказанное изображение, запустив ImageMagick программа identify
такой:
identify -verbose first.jpg > 1.txt
identify -verbose second.jpg > 2.txt
тогда я побежал блестящий opendiff
инструмент (который является частью macOS) такой:
opendiff [12].txt
вы можете извлечь ICC профиль с первого изображения также с ImageMagick такой:
convert first.jpg profile.icc
Я провел небольшое исследование по вопросу @mark, поднятому о профиле ICC. Я придумал способ справиться с этим в модуле python PIL. вот код, который сработал для меня. Я также научился использовать формат файла PNG, а не JPEG для преобразования без потерь.
import Image
img = Image.open('originalImage.jpg')
img.save('test.jpg',icc_profile=img.info.get('icc_profile'))
Я надеюсь, что это поможет другим.
ваше первое входное изображение имеет некоторый icc-профиль, связанный с метаданными, который является необязательным атрибутом, и большинство устройств не могут вводить его в первую очередь. Профиль ICC в основном выполняет своего рода цветокоррекцию, и коэффициенты коррекции вычисляются для каждого уникального устройства во время калибровки.
современные веб-браузеры, утилиты просмотра изображений в основном учитывают эту информацию профиля ICC перед рендерингом изображения на экран, то есть причина, почему есть разница в обоих изображениях.
но, к сожалению, OpenCV не считывает конфигурацию ICC из метаданных изображения для выполнения любой цветовой коррекции.