Pythonでは、画像を読み込んだり表示したりするための便利なライブラリが多数存在します。その中でも代表的なのが、OpenCV、Pillow、そしてMatplotlibです。これらのライブラリを組み合わせて使うことで、柔軟な画像処理が可能となります。
まずは、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
という名前で画像が保存されます。jpg
やbmp
、gif
など他の形式に保存することも可能です。
次に、画像処理において非常に強力なライブラリである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)
これで、指定されたパスに画像が保存されます。
もう一つ、画像を表示する便利な方法として、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に変換してから表示する必要があります。
画像認識において、画像の前処理は非常に重要です。前処理を行うことで、アルゴリズムが画像の重要な特徴をより正確に捉えることができ、認識精度が向上します。ここでは、リサイズ、フィルタリング、グレースケール変換などの基本的な前処理手法を解説します。
画像のリサイズは、画像のピクセル数を変更して、モデルが扱いやすい大きさに揃えるために行います。PillowとOpenCVの両方でリサイズが可能です。
Pillowを使って画像をリサイズするには、resize()
メソッドを使用します。
# Pillowでリサイズ
resized_image = image.resize((200, 200))
resized_image.show()
このコードでは、元の画像を幅200ピクセル、高さ200ピクセルにリサイズしています。
OpenCVでは、cv2.resize()
メソッドを使ってリサイズします。
# OpenCVでリサイズ
resized_image = cv2.resize(image, (200, 200))
# 画像を表示
cv2.imshow('Resized Image', resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
OpenCVの場合も同様に、指定したサイズにリサイズします。
フィルタリングは、画像からノイズを除去したり、エッジを強調したりするために使用されます。OpenCVでは、様々なフィルタリング手法が用意されています。
ガウシアンフィルタは、ノイズ除去によく使われるフィルタリング手法です。
# ガウシアンフィルタの適用
blurred_image = cv2.GaussianBlur(image, (5, 5), 0)
# 画像を表示
cv2.imshow('Blurred Image', blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
ガウシアンフィルタは、画像全体をぼかすことでノイズを減らします。
カラー画像をグレースケールに変換することで、計算量を減らし、画像の重要な形状情報に集中できます。これもまた、OpenCVとPillowの両方で簡単に行えます。
# グレースケール変換
gray_image = image.convert('L')
gray_image.show()
# グレースケール変換
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 画像を表示
cv2.imshow('Grayscale Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
画像認識の学習においては、実際のデータセットを使うことが重要です。データセットは、アルゴリズムの学習や評価に使用されます。Pythonでは、多くのオープンな画像データセットを簡単に利用できます。
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()
このコードでは、最初の手書き数字画像をグレースケールで表示しています。
プログラミングを始めたいと思っているそこのあなた、独学よりもプログラミングスクールが断然おすすめです!理由は簡単、続けやすさです。
独学でプログラミングを続けるのは、実はかなりハードルが高いんです。データによると、なんと87.5%もの学習者が途中で挫折しているとか。一方、各プログラミングスクールが公表しているデータによると、受講生の約95%が最後までやり抜いているとのこと。数字を見れば一目瞭然、プログラミングスクールの方が圧倒的に続けやすいんです。
プログラミングスクールには有料と無料のタイプがありますが、その違いは次の通りです:
どちらが自分に合っているか、よく考えて選ぶのが大事です。
プログラミング初心者でも学びやすいと評判の『FREEKS』、その特徴は以下の通り:
なんと、月会費のみで全カリキュラムが受け放題!Java、PHP、HTML/CSS、JavaScriptなど、多彩なプログラミング言語が学べるんです。しかも、AIが質問に自動で答えてくれるシステムも導入済み。
カリキュラムを終了した後には、Freeks経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。
独学で悩むくらいなら、まずはプログラミングスクールをチェックしてみるのもアリかもしれませんよ!
↓ ↓ こちらをクリック ↓ ↓