Есть ли способ использовать подушки "Image.convert ()" на существующей переменной? - PullRequest
1 голос
/ 23 октября 2019

Здравствуйте,

Возможно, этот вопрос выглядит глупо, но я пытаюсь использовать Подушки Image.convert() для преобразования изображения в оттенки серого. Это изображение я сохранил в переменной img, потому что я уже предварительно обработал его, но не с помощью подушки (тип: numpy.ndarray). Поэтому я набираю:

img = Image.convert('LA')

Но, похоже, он не работает, как говорится:

AttributeError: module 'PIL.Image' has no attribute 'convert'

Если я набираю img = Image.open("picture.jpg").convert('LA'), это работает, но я хочу использовать его напеременная, которая уже существует. Я также не хочу сохранять предварительно обработанное изображение, чтобы просто открыть и преобразовать его с помощью предыдущей команды, потому что это еще более неэффективно (с точки зрения скорости и мощности процессора). Итак: Есть ли правильный способ сделать это?

Спасибо за помощь заранее!

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Вы можете использовать

img = Image.fromarray(img)

для преобразования в тип изображения PIL. Оттуда вы сможете использовать функцию PIL convert()

img = img.convert('LA')

, а затем, чтобы получить прямой доступ к значениям пикселей, вы можете либо преобразовать обратно в массив NumPy

img_array = np.asarray(img)

, либополучить пиксельный доступ к изображению PIL, используя

pixels = img.load()
0 голосов
/ 24 октября 2019

Хотя вы могли бы прекрасно преобразовать свой массив Numpy в изображение PIL, а затем преобразовать его в оттенки серого, а затем преобразовать обратно в массив Numpy следующим образом:

PILImage = Image.fromarray(Numpyimg)
PILgrey  = PILImage.convert('L')
Numpygrey= np.array(PILgrey)

Вы также можете просто сделать МСЭ-R 601-2 преобразовать яркость себя, то есть

L = 0.299 * Red + 0.587 * Green + 0.114 * Blue

Итак, вы получите:

Numpygrey = np.dot(Numpyimg[...,:3], [0.299, 0.587, 0.114]).astype(np.uint8)
...