#python #image
#python #изображение
Вопрос:
Я уже несколько часов борюсь с этой крошечной проблемой. Я пытался внести некоторые изменения в изображение. Вот снипет кода :
import numpy as np
from PIL import Image
#Conversion image array
img = Image.open('lena.jpg')
array = np.array(img)
def niv_de_gris(img):
height = len(img)
width = len(img[0])
#Creation tableau vide
new_img = ([[[0 for i in range(3)] for j in range(width)] for k in range(height)])
for i in range(height):
for j in range(width):
m = np.mean(img[i][j])
for k in range(3):
new_img[i][j][k] = int(m)
return np.array(new_img)
array_gris = niv_de_gris(array)
img_gris = Image.fromarray(array_gris) #problem is here !!
первое преобразование работает отлично: оно принимает изображение и преобразует его в массив. Программа работает без сбоев, модификация изображения работает, она отправляет мне обратно массив изображения, преобразованного в уровни серого.
Тем не менее, когда я хочу преобразовать этот массив в изображение к .show()
нему, я получаю эту ошибку :
Кто-нибудь может помочь мне разобраться в этом, пожалуйста?
Хорошего дня!
Ответ №1:
Массив для PIL , возможно , потребуется обеспечить pixel values are not 0-1 but 0-255
, type is unit8
а затем определить mode as 'RGB'
.
Попробуйте использовать —
array_gris = niv_de_gris(array) * 255 #Skip this step if pixels are 0-255 already
array_gris = array_gris.astype(np.uint8)
img_gris = Image.fromarray(array_gris, mode='RGB')
Это сработало для меня на случайном изображении, которое я выбрал. В зависимости от функции и изображения, я считаю, что единственным по-настоящему важным шагом является обеспечение того, чтобы они были законными значениями пикселей и имели тип uint8.
Комментарии:
1. Работал нормально, просто нужно было удалить ключевое слово «model», которое не было принято! Спасибо большое!
2. О, это должен быть режим. Исправлено