67860


Pythonのnumpy配列で作成した2値配列をPIL.Imageに変換して扱いたいと考えているのですが、その変換が意図通りに行かず苦戦しております。  
以下が簡易化したサンプルコードになります。

[code]

    from PIL import Image
    import numpy as np
    
    arr = np.asarray([
      [0,0,1,0,0,1,0,0,1],
      [0,1,0,0,1,0,0,1,0],
      [1,0,0,1,0,0,1,0,0],
      [0,0,1,0,0,1,0,0,1],
      [0,1,0,0,1,0,0,1,0],
      [1,0,0,1,0,0,1,0,0]
    ], dtype=np.uint8) * 255
    
    print(arr)
    
    img = Image.fromarray(arr, "1")
    
    print(np.asarray(img))
    img.save("result.png")
    
[/code]

実行結果は以下です。

[code]

    [[  0   0 255   0   0 255   0   0 255]
     [  0 255   0   0 255   0   0 255   0]
     [255   0   0 255   0   0 255   0   0]
     [  0   0 255   0   0 255   0   0 255]
     [  0 255   0   0 255   0   0 255   0]
     [255   0   0 255   0   0 255   0   0]]
    [[False False False False False False False False False]
     [ True  True  True  True  True  True  True  True False]
     [False False False False False False False False  True]
     [False False False False False False False False False]
     [ True  True  True  True  True  True  True  True False]
     [ True  True  True  True  True  True  True  True False]]
    
[/code]

出力された画像は以下  
[![result.png](https://i.stack.imgur.com/EMYr8.png)](https://i.stack.imgur.com/EMYr8.png)

斜めに縞が入ったような画像が得られることを期待していましたが、横に不揃いな線が入った画像になってしまいます。  
どこを間違えているのかご教示お願いいたします。

Pythonのバージョンは 3.7.3  
numpyのバージョンは 1.16.2  
Pillowのバージョンは 5.4.1 です。


CC BY-SA 4.0
2020-06-21T08:08:00.290
67859
2020-06-21T09:04:25.733
19036
question
python numpy pillow
Pythonでnumpy.ndarrayからPIL.Imageに変換がうまく行かない


> img = Image.fromarray(arr, "1")

第2匹数の"1"を消したらおそらく質問者様が  
想定されている挙動を確認できました。

下記記事にmode=1に関して挙動が怪しい  
(バグの可能性もあり)との記述も見られるので  
mode=Lを使うのが良さそうな感じもしますね

<https://koji.noshita.net/post/2017/0224-pillow/>


CC BY-SA 4.0
2020-06-21T08:52:37.360
67860
2020-06-21T09:04:25.733
2020-06-21T09:04:25.733
40756
40756
67859
answer