Categories: Python 画像認識

第2章: Pythonと画像処理の基礎

2.1 画像の読み込み、表示、保存

Pythonでは、画像を読み込んだり表示したりするための便利なライブラリが多数存在します。その中でも代表的なのが、OpenCVPillow、そしてMatplotlibです。これらのライブラリを組み合わせて使うことで、柔軟な画像処理が可能となります。

2.1.1 Pillowライブラリを使った画像の読み込み、表示、保存

まずは、Pillowライブラリを使って画像を操作する基本的な手順を見ていきましょう。PillowはPythonで使える画像処理ライブラリで、簡単に画像を読み込み、表示、保存ができます。

インストール

Pillowを使うには、まず以下のようにインストールする必要があります。

pip install pillow
画像の読み込み

画像を読み込むには、Image.open()メソッドを使用します。これにより、指定したファイルパスから画像を開きます。

from PIL import Image

# 画像を読み込む
image = Image.open('example.jpg')

このコードでは、example.jpgというファイル名の画像を指定しています。画像がディスク上に存在すれば、imageという変数に画像データが格納されます。

画像の表示

読み込んだ画像を表示するには、show()メソッドを使用します。これは、画像ビューアを自動的に開き、画像を表示します。

# 画像を表示する
image.show()
画像の保存

画像を保存するには、save()メソッドを使います。ファイル形式は、ファイル名の拡張子によって自動的に決定されます。

# 画像を保存する
image.save('output_image.png')

このコードでは、output_image.pngという名前で画像が保存されます。jpgbmpgifなど他の形式に保存することも可能です。

2.1.2 OpenCVを使った画像の読み込み、表示、保存

次に、画像処理において非常に強力なライブラリであるOpenCVを使用して、同様の処理を行います。OpenCVはコンピュータビジョンにおける標準的なライブラリで、Pythonに限らず多くの言語で利用されています。

インストール

OpenCVを使用するためには、以下のコマンドでインストールを行います。

pip install opencv-python
画像の読み込み

OpenCVでは、cv2.imread()メソッドを使って画像を読み込みます。

import cv2

# 画像を読み込む
image = cv2.imread('example.jpg')
画像の表示

OpenCVでは、cv2.imshow()メソッドを使用して画像を表示します。表示ウィンドウは手動で閉じる必要があるため、cv2.waitKey()でキーボード入力を待ちます。

# 画像を表示する
cv2.imshow('Image', image)

# キー入力を待つ
cv2.waitKey(0)

# ウィンドウを閉じる
cv2.destroyAllWindows()
画像の保存

画像を保存するには、cv2.imwrite()を使います。ファイル形式は、指定されたファイル名の拡張子に基づきます。

# 画像を保存する
cv2.imwrite('output_image.png', image)

これで、指定されたパスに画像が保存されます。

2.1.3 Matplotlibを使った画像の表示

もう一つ、画像を表示する便利な方法として、Matplotlibライブラリを使用する方法があります。Matplotlibは、主にデータのプロットや可視化のために使用されますが、画像を簡単に表示する機能も備えています。

インストール

まずは、Matplotlibをインストールします。

pip install matplotlib
画像の表示

Matplotlibを使って画像を表示するには、plt.imshow()メソッドを使用します。

import matplotlib.pyplot as plt
import cv2

# 画像を読み込む
image = cv2.imread('example.jpg')

# BGRからRGBに変換(OpenCVはBGRで画像を読み込むため)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# 画像を表示する
plt.imshow(image)
plt.axis('off') # 軸を非表示にする
plt.show()

plt.imshow()では画像がRGBフォーマットで扱われるため、OpenCVから読み込んだBGR画像をcv2.cvtColor()でRGBに変換してから表示する必要があります。

2.2 画像の前処理

画像認識において、画像の前処理は非常に重要です。前処理を行うことで、アルゴリズムが画像の重要な特徴をより正確に捉えることができ、認識精度が向上します。ここでは、リサイズ、フィルタリング、グレースケール変換などの基本的な前処理手法を解説します。

2.2.1 リサイズ(サイズ変更)

画像のリサイズは、画像のピクセル数を変更して、モデルが扱いやすい大きさに揃えるために行います。PillowとOpenCVの両方でリサイズが可能です。

Pillowでのリサイズ

Pillowを使って画像をリサイズするには、resize()メソッドを使用します。

# Pillowでリサイズ
resized_image = image.resize((200, 200))
resized_image.show()

このコードでは、元の画像を幅200ピクセル、高さ200ピクセルにリサイズしています。

OpenCVでのリサイズ

OpenCVでは、cv2.resize()メソッドを使ってリサイズします。

# OpenCVでリサイズ
resized_image = cv2.resize(image, (200, 200))

# 画像を表示
cv2.imshow('Resized Image', resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

OpenCVの場合も同様に、指定したサイズにリサイズします。

2.2.2 フィルタリング

フィルタリングは、画像からノイズを除去したり、エッジを強調したりするために使用されます。OpenCVでは、様々なフィルタリング手法が用意されています。

ガウシアンフィルタ

ガウシアンフィルタは、ノイズ除去によく使われるフィルタリング手法です。

# ガウシアンフィルタの適用
blurred_image = cv2.GaussianBlur(image, (5, 5), 0)

# 画像を表示
cv2.imshow('Blurred Image', blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

ガウシアンフィルタは、画像全体をぼかすことでノイズを減らします。

2.2.3 グレースケール変換

カラー画像をグレースケールに変換することで、計算量を減らし、画像の重要な形状情報に集中できます。これもまた、OpenCVとPillowの両方で簡単に行えます。

Pillowでのグレースケール変換
# グレースケール変換
gray_image = image.convert('L')
gray_image.show()
OpenCVでのグレースケール変換
# グレースケール変換
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 画像を表示
cv2.imshow('Grayscale Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.3 実際のデータセットの扱い

画像認識の学習においては、実際のデータセットを使うことが重要です。データセットは、アルゴリズムの学習や評価に使用されます。Pythonでは、多くのオープンな画像データセットを簡単に利用できます。

2.3.1 MNISTデータセット

MNISTは、手書き数字の画像データセットで、画像認識の基本を学ぶための標準的なデータセットです。kerasライブラリを使用して、MNISTデータセットを取得し、画像として表示する例を紹介します。

from tensorflow.keras.datasets import mnist
import matplotlib.pyplot as plt

# MNISTデータセットのロード
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

# 画像を表示
plt.imshow(train_images[0], cmap='gray')
plt.title(f'Label: {train_labels[0]}')
plt.show()

このコードでは、最初の手書き数字画像をグレースケールで表示しています。


初心者におすすめ!プログラミングスクールのススメ

未経験でも気軽に!サブスク型プログラミングスクール【Freeks】

プログラミングを始めたいと思っているそこのあなた、独学よりもプログラミングスクールが断然おすすめです!理由は簡単、続けやすさです。

独学の挫折率、驚きの87.5%!

独学でプログラミングを続けるのは、実はかなりハードルが高いんです。データによると、なんと87.5%もの学習者が途中で挫折しているとか。一方、各プログラミングスクールが公表しているデータによると、受講生の約95%が最後までやり抜いているとのこと。数字を見れば一目瞭然、プログラミングスクールの方が圧倒的に続けやすいんです。

有料と無料、スクールの違いは?

プログラミングスクールには有料と無料のタイプがありますが、その違いは次の通りです:

  • 受講条件が異なる
  • 学べるスキルやカリキュラム内容が異なる
  • 就職や転職のサポート内容が異なる

どちらが自分に合っているか、よく考えて選ぶのが大事です。

サブスク型プログラミングスクール『FREEKS(フリークス)』に注目!

プログラミング初心者でも学びやすいと評判の『FREEKS』、その特徴は以下の通り:

  • 未経験者向けのわかりやすいカリキュラム
  • 経験豊富なエンジニアのサポート
  • オンラインで自分のペースで学習可能

なんと、月会費のみで全カリキュラムが受け放題!Java、PHP、HTML/CSS、JavaScriptなど、多彩なプログラミング言語が学べるんです。しかも、AIが質問に自動で答えてくれるシステムも導入済み。

終了後は副業もサポート!

カリキュラムを終了した後には、Freeks経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。

独学で悩むくらいなら、まずはプログラミングスクールをチェックしてみるのもアリかもしれませんよ!
 ↓ ↓ こちらをクリック ↓ ↓ 

p-school

Share
Published by
p-school

Recent Posts

第6章: PHPのデータベース操作

PHPを使用してデータベースに…

2週間 ago

第5章: PHPのオブジェクト指向プログラミング(OOP)

オブジェクト指向プログラミング…

2週間 ago

第4章: PHPの関数

プログラミングにおいて、関数は…

2週間 ago

第3章: PHPの配列とコレクション

PHPでの配列とコレクションの…

2週間 ago

第2章: PHPの基本文法

PHPの基本的な構文や使い方を…

2週間 ago