Как преобразовать изображение в градациях серого в монохромное изображение в формате PIL? - PullRequest
0 голосов
/ 09 ноября 2018

Я вижу параметр матрицы в функции convert, но его описание неясно. Это говорит, что это должно быть 4 или 12-кратное без объяснения значения компонента.

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

Код:

from PIL import Image
import matplotlib.pyplot as plt

with open('myimage.png', 'rb') as fp:
    #matrix = (0, 1, 0, 1)
    matrix = (0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1)
    im = Image.open(fp)
    im = im.convert('RGB', matrix)
    plt.imshow(im)
    plt.show()

бросков

 ValueError: image has wrong mode

в коде Image.py

    if matrix:
        # matrix conversion
        if mode not in ("L", "RGB"):
            raise ValueError("illegal conversion")
        >>>>>> im = self.im.convert_matrix(mode, matrix)
        return self._new(im)

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

1 Ответ

0 голосов
/ 11 ноября 2018

Я думаю, что вы пытаетесь это сделать, и, возможно, у вас есть изображение в палитре:

#!/usr/bin/env python3
from PIL import Image

# Open and ensure in RGB mode - in case image is palettised
im = Image.open('toystory.png').convert('RGB')

# Crude conversion to black and white using 20% red, 50% green and 30% blue
matrix = (0.2, 0.5, 0.3, 0.0, 0.2, 0.5, 0.3, 0.0, 0.2, 0.5, 0.3, 0.0)

result = im.convert('RGB',matrix)

result.save('result.png')

Это преобразует это:

enter image description here

в это:

enter image description here


Если вы измените матрицу на следующую, она поменяет местами красный и синий каналы:

matrix = (0,0,1,0, 0,1,0,0, 1,0,0,0) 

enter image description here

...