#python #numpy #python-imaging-library
#python #numpy #python-imaging-library
Вопрос:
Я пытаюсь поместить свое изображение в форму списка, чтобы вставить пиксели в изображение. Тем не менее, я сталкиваюсь с проблемами при обратном преобразовании в изображение после выполнения манипуляций со списком. Оказывается, просто переход от image -> array -> list -> array -> image довольно сильно портит изображение.
Однако переход от image -> array -> image, похоже, работает просто отлично. Это дополнительный шаг перехода к списку, который вызывает проблемы.
Ниже приведен код python3, который я запускаю. Кто-нибудь может сказать мне, что я делаю не так и как преобразовать 3D-список обратно в RGB-изображение, идентичное оригиналу? Как исходный, так и конечный массивы кажутся одинаковыми, поэтому не уверен, что PIL не нравится…
import numpy as np
from PIL import Image
img = Image.open('1.jpg')
array = np.array(img)
list1 = array.tolist()
arrayF = np.array(list1)
img2 = Image.fromarray(arrayF,"RGB")
img2.save('trial.jpg')
print(array)
print(arrayF)
Комментарии:
1. Попробуйте распечатать
dtype
ваши массивы Numpy, напримерprint(arrayF.dtype)
2. PIL — это библиотека только для Python 2, которая не обновлялась в течение десятилетия.
3. @MarkSetchell Спасибо, скорее всего, это так. array.dtype = uint8 amp; arrayF.dtype = int64. Я посмотрю, как преобразовать.
4.
Eightbitarray = sixtyfourbitarray.astype(np.uint8)
5. @MarkSetchell Это сработало. Спасибо! отправьте сообщение в качестве ответа, и я отмечу его как принятый.
Ответ №1:
Если вы проверите dtype
свои массивы с print(array.dtype)
помощью, вы увидите, что array
это 8-разрядный и arrayF
64-разрядный … что неприемлемо для PIL для изображения RGB.
Сделать arrayF
обратно в 8-битный с:
arrayF = arrayF.astype(np.uint8)