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)
Другие вопросы по тегам