2015-09-21 2 views
3

Я хочу, чтобы метод генерировал небольшие квадратные изображения RGB, красного или зеленого цвета. Он должен создавать сплошные блоки цвета, но изображение, выводимое из PIL, очень странно. Зачем?PIL Image создает странные изображения из массива numpy - почему?

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, так что я масштабируется его так, вы можете лучше видеть):

scaled up copy of output image

ответ

5

Вы должны установить DTYPE:

narr = np.asarray(arr,dtype=np.uint8) 
+0

спасибо, работал как шарм. –

+1

Не беспокойтесь, dtype выводится как 'int64', если вы не передадите его явно –