本文へスキップ
BecomeCoder

Python画像認識コース · 第2章 画像をコードで扱う · レッスン4

画像はピクセルの格子 ― 数値で絵を作る

ブラウザで完結

導入

画像は「ピクセル(点)」が縦横に並んだものです。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 の中の 0255 を書き換えて、別の模様を作ってみましょう。中央の行を全部 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。

実際に動かしてみよう

下のエディタにPythonを書いて「実行」を押すと、本物の Pillow・OpenCV(Pyodide)で画像処理をその場で試せます。処理した画像は図として下に表示されます。初回や OpenCV を使う回は読み込みに時間がかかります(数十秒かかることがあります)。しきい値やフィルタの数値を書き換えて、画像の変化を確かめましょう(画像に描く文字は表示が崩れるため英字で書きます。Tesseract などOCRエンジン本体は第5章の読み物で解説します)。

Python — ライブラリ付きで実行(Pyodide)

numpy / pandas / matplotlib が使える本物のPython(Pyodide)を読み込みます。初回のみ読み込みに少し時間がかかります(以降はブラウザにキャッシュされます)。
スクロールして表示された時点でも自動で読み込まれます。