from PIL import Image from numpy import * im = array(Image.open('img.jpg').convert('L')) print(im.shape, im.dtype) print(im)
(533, 800) uint8 [[156 159 162 ..., 135 132 130] [156 155 155 ..., 133 132 133] [155 153 155 ..., 134 133 131] ..., [ 87 88 85 ..., 71 71 70] [ 86 87 87 ..., 70 72 73] [ 89 95 95 ..., 74 73 73]]
と表示される。最初の行のタプルは、(行数、列数、色数)を表してる。上記はグレースケールに変換しており、その場合は、色数は表示されない。uint8は、要素のデータ型。通常、画像は符号なし8ビット整数で符号化されるらしい。im自体を出力したら上記のような配列が表示された。
im = array(Image.open('img.jpg'))
print(im.shape, im.dtype)
これだとグレースケール変換していないので、下記のように色数も表示される。赤、緑、青という並びなんだろうか。 (533, 800, 3) uint8
im = array(Image.open('img.jpg'))
print(im)
これだと、色が3色があるので、配列は下記のようになっている。
[[[150 156 178] [153 159 181] [154 162 183] ..., [121 137 163] [119 134 163] [116 131 162]]
[[148 156 177] [149 155 177] [149 155 177] ..., [119 135 161] [118 134 160] [119 134 165]]
[[147 155 176] [147 153 175] [149 155 177] ..., [120 136 162] [119 135 161] [118 132 167]]
..., [[ 88 88 86] [ 88 89 84] [ 86 86 84] ..., [ 72 71 76] [ 72 71 76] [ 71 70 75]]
[[ 87 87 85] [ 87 88 83] [ 88 88 86] ..., [ 69 70 74] [ 71 72 76] [ 72 73 77]]
[[ 91 90 86] [ 97 96 92] [ 96 95 93] ..., [ 73 74 78] [ 72 73 77] [ 72 73 77]]]
色を反転させて保存する
これはhtmlでつかってる0-255の数字と一緒であります。各数値を255から引くことで色を反転させることができます。
from PIL import Image from numpy import * im = array(Image.open('img.jpg')) Image.fromarray(255 - im).save('img2.jpg')
下記のようになりました。
配列から画像を作ってみる
下記のようにすると、白から黒に向けたグラデーションになる。[赤、緑、青]なので、赤を全部0にすると、青緑の薄いから濃いのグラデーションになる。
from PIL import Image import numpy as np a = np.array([ [ [230,230,230],[210,210,210],[190,190,190],[170,170,170],[150,150,150] ], [ [230,230,230],[210,210,210],[190,190,190],[170,170,170],[150,150,150] ], [ [230,230,230],[210,210,210],[190,190,190],[170,170,170],[150,150,150] ], [ [230,230,230],[210,210,210],[190,190,190],[170,170,170],[150,150,150] ], [ [230,230,230],[210,210,210],[190,190,190],[170,170,170],[150,150,150] ], ]) Image.fromarray(np.uint8(a)).save('img2.jpg') for row in a: for col in row: col[0] = 0 Image.fromarray(np.uint8(a)).save('img3.jpg')