導入
画像は「ピクセル(点)」が縦横に並んだものです。1つ1つのピクセルは明るさや色を表す数値を持っています。まずは NumPy で、数値だけから小さな画像を作ってみましょう。
説明
import numpy as np
import matplotlib.pyplot as plt
# 5×5 の数値の格子を作る(0=黒, 255=白)
grid = np.array([
[ 0, 0,255, 0, 0],
[ 0,255,255,255, 0],
[255,255,255,255,255],
[ 0,255,255,255, 0],
[ 0, 0,255, 0, 0],
], dtype=np.uint8)
print("形(shape):", grid.shape) # (5, 5) = 縦5 × 横5
print(grid)
plt.imshow(grid, cmap="gray", vmin=0, vmax=255)
plt.title("5x5 pixels")
- 画像の中身は
np.uint8(0〜255 の整数)の配列です。0 が黒、255 が白、その間が灰色です。 grid.shapeは(高さ, 幅)。ここでは 5×5 の小さな画像です。cmap="gray"は「数値を白黒で表示する」指定。vmin=0, vmax=255で 0→黒・255→白 に固定します。
拡大された図に、数字がそのまま白いひし形として見えるはずです。画像とは数値の格子である——これがすべての出発点です。
やってみよう
grid の中の 0 や 255 を書き換えて、別の模様を作ってみましょう。中央の行を全部 0 にすると、真ん中に黒い横線が入ります。
演習
上の grid を書き換えて、対角線が白(255)・それ以外が黒(0) の 5×5 画像を作って表示してください。
ヒント1を見る
np.eye(5) は対角成分が 1 の行列を作ります。(np.eye(5) * 255).astype(np.uint8) で対角が白の画像になります。
ヒント2を見る
grid = (np.eye(5) * 255).astype(np.uint8) に差し替えれば OK。