Модуль подушки - изменение оттенка при кадрировании и сохранении (без преобразования) - PullRequest
0 голосов
/ 06 июня 2018

Я хочу обрезать изображение и сохранить его, но проблема в том, что после сохранения того же формата изображение значительно меняет свой оттенок.Почему это происходит?Я даже не конвертирую это в процессе.

Вот мой код:

def square_crop(resized_image):
    print "square crop"
    width, height = resized_image.size
    print width,height
    edge_length = 3600

    if(width >= height):
        print("width>=height")
        left = (width - edge_length)/2
        top = (height - edge_length)/2
        right = (width + edge_length)/2
        bottom = (height + edge_length)/2
        squared_image = resized_image.crop((left, top, right, bottom))
        squared_image.save('squared.png')

И запутанная часть в том, что этот код использует одно и то же изображение и сохраняет его без изменения оттенка, поэтому у функции обрезки должна быть проблема:

def image_resize(image):
    print "image resize"
    width, height = image.size
    print width,height

    if(width > 3601 and height > 3601):
        print width, height
        if(width >= height):
            ratio = float(width)/float(height)
            w = 3601 * ratio
            h = 3601.0
            print ratio, w, h
            resized_image = image.resize([int(w), int(h)])
            resized_image.save("resized.png")
        else:
            ratio = float(height)/float(width)
            print(ratio)
            w = 3601.0
            h = 3601 * ratio
            print ratio, w, h
            resized_image = image.resize([int(w), int(h)])
            resized_image.save("heic1509a_resized.png")

* РЕДАКТИРОВАТЬ: Когда я импортирую файл .jpg и сохраняю в .jpg, обе функции имеют одну и ту же проблему оттенка.То же самое с .tif.

** РЕДАКТИРОВАТЬ: Также я заметил, что для некоторых изображений эта потеря красного цвета не происходит.Я действительно понятия не имею, что происходит.Я оставлю скриншоты до и после, чтобы убедиться в этом.

До - После

*** РЕДАКТИРОВАТЬ: Проблема отцветовое пространство, поскольку изображения, которые изменили цвет при сохранении, были закодированы с использованием цветового пространства ProPhoto RGB (ROMM RGB (эталонный выходной метрический показатель)).

Я использую gimp2, чтобы сначала преобразовать их в RGB без потери цвета, ноЯ хотел бы найти способ сделать это автоматически из Python.

Я буду публиковать любые новые обновления по этому вопросу.

1 Ответ

0 голосов
/ 06 июня 2018

Проблема заключалась в том, что при сохранении файла библиотека PIL автоматически переключала цветовое пространство изображения (ROMM-RGB) на другое цветовое пространство (RGB или sRGB), и в основном каждый цвет менялся.

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

Я не могу объяснить слишком подробно, потому что я просто разбираюсь с этим.Вот код, который решил эту проблему:

resized_image.save('resized.jpg',     #file name
                    format = 'JPEG',  #format of the file
                    quality = 100,    #compression quality
                    icc_profile = resized_image.info.get('icc_profile',''))  #preserve the icc profile of the photo(this was the one that caused problems)

Вот ссылка на более подробный ответ: LINK

...