PIL Image создает странные изображения из массива numpy - почему?
Я хочу, чтобы метод генерировал маленькие квадратные изображения RGB, красного, зеленого или синего цвета. Он должен производить сплошные цветные блоки, но вывод изображения из PIL очень странный. Зачем?
import numpy as np
from PIL import Image
class MakeSquares():
def __init__(self):
self.num_rows = 3
self.num_cols = 3
self.colourmap = {'red': [255, 0, 0],
'green': [0, 255, 0],
'blue': [0, 0, 255]}
def generateExample(self, label):
arr = []
colour = label
colour_array = self.colourmap[colour]
for i in range(0, self.num_rows):
sarr = []
for j in range(0, self.num_cols):
sarr.append(colour_array)
arr.append(sarr)
narr = np.asarray(arr)
return narr
test = MakeSquares()
t = test.generateExample("red")
print t
testimage = Image.fromarray(t, "RGB")
testimage.save("testimage.jpg")
Этот код возвращает следующий массив numpy:
[[[255 0 0]
[255 0 0]
[255 0 0]]
[[255 0 0]
[255 0 0]
[255 0 0]]
[[255 0 0]
[255 0 0]
[255 0 0]]]
Но изображение, которое он создает и сохраняет, все испорчено (оно должно быть только 3х3, поэтому я увеличил его, чтобы вы могли лучше видеть):
1 ответ
Решение
Вам нужно установить dtype:
narr = np.asarray(arr,dtype=np.uint8)