クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

画像を数の配列として読む

このレッスンのあとで: 画像を数の配列として読み、大きさとピクセルの値を取り出せる。

60分のレッスンコマンド2件コンピュータビジョンラボ:JupyterLab でピクセル、しきい値、物の数え方

画像はピクセルの数の配列

デジタル画像は、ピクセルと呼ぶ小さな点を、縦と横に並べたものです。1つのピクセルは数で表されるので、画像は数の配列として読めます。

この見方ができると、明るさを調べる、傷を探す、物を数えるといった作業を、コードで自動にできます。たとえば検品のカメラは、写真の数を読んで、いちばん明るい点を探します。

このレッスンのゴール

メモ

画像を数の配列として読み、大きさとピクセルの値を取り出せる。

キーワード

ことばいみれい
ピクセル画像を作る1つの点。1つ以上の数を持つ
大きさ幅と高さ。ピクセルの数で表す320 × 240
モード1つのピクセルが持つ数の並べ方RGB
チャンネル1つのピクセルが持つ数の1つ。色の成分
配列数を行と列に並べた表
座標ピクセルの場所を示す、行と列の番号

学生が入力するセルは、このプレビューでは空白です。

画像は行と列に並んだ数の表

画像は、横に並ぶ列と、縦に並ぶ行でできています。行と列が交わる1点がピクセルです。

幅が320、高さが240の画像には、320 × 240 で 76800 個のピクセルがあります。1つのピクセルが持つ数の並べ方を、モードと呼びます。

モードで1つのピクセルの数が変わる

モードチャンネルの数1つのピクセルの例意味
L1158グレー。0 が黒、255 が白
RGB3(197, 157, 62)カラー。赤、緑、青の強さ
RGBA4(197, 157, 62, 255)カラーと、透明の度合い

学生が入力するセルは、このプレビューでは空白です。

ラボの画像を1枚開いて調べる

ラボには、コインを並べた画像 coins.png があります。次のコマンドは、その大きさとモードと、2つのピクセルを表示します。

スクリプトが出す言葉は英語です。size は大きさ、mode はモード、pixel at は、その場所のピクセルです。grey mean は、グレーにしたときの平均の明るさです。

画像の大きさとピクセルを見る

コマンド
docker exec jupyter python3 steps/look.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

出力の数の読み方

大きさは 320 と 240、モードは RGB です。10, 10 のピクセルは (35, 35, 35) で、ほぼ黒の背景です。50, 50 は (197, 157, 62) で、コインの金色です。

グレーの平均は 57.6 です。画像の大部分が暗い背景だからです。

ピクセルの場所は行と列で指す

数の配列では、ピクセルを grid[行][列] で取り出します。番号は 0 から数え、行は上から、列は左から数えます。

Pillow の getpixel は、順番が逆です。getpixel((x, y)) は、列、行の順に書きます。同じ場所でも、書き方が2つあります。

同じ場所を2つの書き方で指す

道具書き方指す場所順番
リストgrid[1][3]上から2行目、左から4列目行、列
NumPynumbers[1, 3]上から2行目、左から4列目行、列
Pillowgetpixel((3, 1))上から2行目、左から4列目列、行

学生が入力するセルは、このプレビューでは空白です。

いちばん明るいピクセルを探す

コード: python
road = [[70, 72, 110], [68, 245, 112], [71, 109, 108]]
best = road[0][0]
where = [0, 0]
for row in range(len(road)):
    for column in range(len(road[0])):
        if road[row][column] > best:
            best = road[row][column]
            where = [row, column]
print("いちばん明るい値:", best)
print("場所(行, 列):", where)
# 245 を 20 に変えて、もう一度実行します。
# 場所は、どこになりますか。

よくある間違い

注意

行と列の順番は、どの道具でも同じと考えがちです。実際は、リストと NumPy は行、列で、Pillow の getpixel は列、行です。道具を変えたら、順番をまず確かめます。

画像の大きさがデータの量を決める

1つのピクセルの数が1バイトなら、RGB の画像は、ピクセルの数の3倍の数を持ちます。大きな画像ほど、読む数も計算も増えます。

coins.png の数の個数は、次のコマンドで確かめられます。

ピクセルの数と、数の個数

コマンド
docker exec jupyter python3 -c "print(320 * 240, 320 * 240 * 3)"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

このラボとソースについて: コンピュータビジョンラボ:JupyterLab でピクセル、しきい値、物の数え方

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。