【Python】第9章第3回:画像処理(PillowとOpenCV)
本記事では、Pythonを使った画像処理の基礎を学びます。代表的なライブラリであるPillowとOpenCVを比較し、基本的な画像処理技術を実践例とともに解説します。
0. 記事の概要
この記事を読むメリット
- 画像処理の基礎を理解:デジタル画像を操作する技術がわかります。
- PillowとOpenCVの使い分けを習得:適切なライブラリを選べるようになります。
- 実践スキルの向上:画像の加工や解析の基本を学べます。
この記事で学べること
- 画像処理の基本概念と応用例
- PillowとOpenCVの基本的な使い方
- 画像のリサイズ、回転、フィルタリング方法
1. 画像処理の基本とは?
1.1 画像処理の定義
画像処理とは、デジタル画像を加工・解析する技術です。主な応用例として以下があります。
- 画像認識: 車のナンバープレートの認識など。
- 画像補正: 写真の明るさや色味を調整。
- フィルタリング: エッジ検出やぼかし効果を適用。
1.2 画像処理の種類
画像処理には、以下のような種類があります。
- 空間処理: 画像の各ピクセルを直接操作。
- 周波数処理: フーリエ変換を用いて画像を解析。
- 特徴抽出: 画像内の特定のパターンを検出。
2. PillowとOpenCVの比較
2.1 Pillowの特徴
Pillowは、以下のような特徴を持つシンプルで使いやすいライブラリです。
- 画像の読み込みや保存が簡単。
- リサイズや回転、フィルタリングが容易。
- 初心者に優しい設計。
2.2 OpenCVの特徴
OpenCVは、以下の点で優れた画像処理ライブラリです。
- 高速で高度な画像処理が可能。
- コンピュータビジョンに特化した機能を提供。
- リアルタイム処理に対応。
2.3 コード例で比較
# Pillowの例
from PIL import Image
# 画像を読み込み、リサイズ
img = Image.open("example.jpg")
img_resized = img.resize((100, 100))
img_resized.show()
# OpenCVの例
import cv2
# 画像を読み込み、リサイズ
img = cv2.imread("example.jpg")
img_resized = cv2.resize(img, (100, 100))
cv2.imshow("Resized Image", img_resized)
cv2.waitKey(0)
cv2.destroyAllWindows()
動作解説
- Pillow: Python標準ライブラリに近い感覚で簡単に操作可能。
- OpenCV: 高速かつ詳細な画像処理が可能。
3. 実践例:画像のぼかし処理
3.1 簡単なぼかし処理コード
# OpenCVでぼかし処理
import cv2
# 画像を読み込み
img = cv2.imread("example.jpg")
# ガウシアンぼかしを適用
blurred_img = cv2.GaussianBlur(img, (15, 15), 0)
# 結果を表示
cv2.imshow("Blurred Image", blurred_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
動作解説
- GaussianBlur: ガウシアンカーネルを使用して画像をぼかします。
- カーネルサイズ: ぼかしの強さを制御します。
4. 練習問題
以下の課題に挑戦してみましょう。
- Pillowを使って画像をグレースケールに変換してください。
- OpenCVを使って画像のエッジ検出を行ってください。
- 画像の一部をトリミングして保存するスクリプトを作成してください。
5. 練習問題の解答と解説
問2の解答例
# OpenCVでエッジ検出
import cv2
# 画像を読み込み
img = cv2.imread("example.jpg", cv2.IMREAD_GRAYSCALE)
# エッジ検出を適用
edges = cv2.Canny(img, 100, 200)
# 結果を表示
cv2.imshow("Edges", edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
6. まとめ
本記事では、PillowとOpenCVを使用した画像処理の基礎を学びました。それぞれの特徴を理解し、プロジェクトに応じたライブラリを選択して、画像処理技術を活用してみてください。