Pocket
LINEで送る

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')

下記のようになりました。

img2

配列から画像を作ってみる

下記のようにすると、白から黒に向けたグラデーションになる。[赤、緑、青]なので、赤を全部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')

img2.jpg
img2

img3.jpg
img3

Pocket
LINEで送る


コメントください

関連記事

プログラミング

cakePHP2 – 多言語化

多言語化します。 cakephpマニュアルのこのページに説明が書いてあ 続きを読む …

プログラミング

Go言語によるビットコインのフルノード実装btcdを調べる(2)

btcdを実行した際のプログラムの流れを最初から確認してみます。 se 続きを読む …

%d人のブロガーが「いいね」をつけました。