前回のおさらいと今回のテーマ
こんにちは!前回は、画像データの扱い方について解説しました。画像のピクセルデータの基本と、Pythonを使った画像の読み込み方法を学びました。
今回は、OpenCV入門として、画像処理ライブラリOpenCVの基本操作を紹介します。OpenCVは、コンピュータビジョンや画像処理に広く使われている強力なライブラリで、Pythonからも簡単に利用できます。この記事では、OpenCVの基本的な使い方や、画像操作の基本を解説します。
OpenCVとは?
OpenCV(Open Source Computer Vision Library)は、オープンソースのコンピュータビジョンおよび画像処理ライブラリで、さまざまな画像処理アルゴリズムを提供しています。リアルタイムの画像処理にも適しており、画像解析、物体認識、顔検出、映像処理など幅広い用途に利用されています。
OpenCVのインストール
OpenCVをPythonで利用するには、まずライブラリをインストールする必要があります。以下のコマンドを使用して、OpenCVをインストールします。
pip install opencv-python
インストールが完了したら、cv2
というモジュール名でOpenCVを利用できるようになります。
OpenCVでの画像操作の基本
ここでは、OpenCVを使って画像を読み込み、表示し、保存する基本的な操作方法を紹介します。
1. 画像の読み込み
画像を読み込むには、cv2.imread()
関数を使用します。この関数には、読み込む画像ファイルのパスと読み込みモードを指定します。
import cv2
# カラー画像として読み込む
image = cv2.imread('example.jpg', cv2.IMREAD_COLOR)
# グレースケール画像として読み込む
gray_image = cv2.imread('example.jpg', cv2.IMREAD_GRAYSCALE)
cv2.IMREAD_COLOR
:カラー画像を読み込みます(デフォルト)。cv2.IMREAD_GRAYSCALE
:グレースケール画像を読み込みます。
2. 画像の表示
OpenCVを使って画像を表示するには、cv2.imshow()
関数を使用します。表示されたウィンドウは、cv2.waitKey(0)
でキー入力を待機することで閉じることができます。
# 画像の表示
cv2.imshow('Color Image', image)
cv2.imshow('Grayscale Image', gray_image)
# キー入力待機(0で無制限に待機)
cv2.waitKey(0)
# ウィンドウを閉じる
cv2.destroyAllWindows()
cv2.imshow()
の第1引数はウィンドウの名前、第2引数は表示する画像データです。
3. 画像の保存
OpenCVで処理した画像を保存するには、cv2.imwrite()
関数を使用します。
# 画像の保存
cv2.imwrite('output.jpg', image)
cv2.imwrite('output_gray.jpg', gray_image)
このコードは、カラー画像とグレースケール画像をそれぞれ指定されたファイル名で保存します。
OpenCVの基本操作
OpenCVには、画像操作のためのさまざまな関数が用意されています。ここでは、基本的な画像操作方法を紹介します。
1. 画像のリサイズ
画像のサイズを変更するには、cv2.resize()
関数を使用します。これは、指定したサイズに画像をリサイズする方法です。
# 画像のリサイズ
resized_image = cv2.resize(image, (200, 200))
# リサイズした画像の表示
cv2.imshow('Resized Image', resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
ここでは、画像のサイズを200×200ピクセルにリサイズしています。
2. 画像の回転
画像を回転させるには、cv2.rotate()
関数を使用します。OpenCVには90度単位の回転が用意されています。
# 90度回転(時計回り)
rotated_image = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE)
# 回転した画像の表示
cv2.imshow('Rotated Image', rotated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
他の回転方法には、cv2.ROTATE_90_COUNTERCLOCKWISE
(反時計回り)、cv2.ROTATE_180
(180度回転)があります。
3. 画像の切り抜き(クロップ)
画像の一部を切り抜くには、NumPy配列のスライスを使ってピクセルの範囲を指定します。
# 画像の切り抜き(座標指定:左上から右下)
cropped_image = image[50:200, 100:300]
# 切り抜いた画像の表示
cv2.imshow('Cropped Image', cropped_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
ここでは、画像の座標範囲を指定して、50から200ピクセル(縦)と100から300ピクセル(横)の範囲を切り抜いています。
4. 色空間の変換
OpenCVを使うと、色空間を簡単に変換することができます。たとえば、RGBからHSVに変換する場合は、cv2.cvtColor()
関数を使用します。
# BGRからHSVに変換
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# HSV画像の表示
cv2.imshow('HSV Image', hsv_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
ここで、OpenCVのデフォルトの色順はBGR(青、緑、赤)である点に注意が必要です。
5. 画像のぼかし(ブラー)
画像のノイズを減らしたり、滑らかにするためにぼかし(ブラー)処理を行います。cv2.GaussianBlur()
関数を使用すると、ガウシアンブラーを適用できます。
# ガウシアンブラーを適用
blurred_image = cv2.GaussianBlur(image, (15, 15), 0)
# ぼかした画像の表示
cv2.imshow('Blurred Image', blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
ここでは、15×15のカーネルサイズでガウシアンブラーを適用しています。
OpenCVの応用例
1. 顔検出
OpenCVには、Haar特徴分類器を用いた顔検出機能が組み込まれています。以下は、Haarカスケードを使った顔検出の基本的な例です。
# Haarカスケード分類器の読み込み
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# グレースケール画像に変換
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 顔の検出
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# 検出した顔に矩形を描画
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)
# 顔検出結果の表示
cv2.imshow('Face Detection', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
このコードは、Haarカスケード分類器を使って顔を検出し、検出された顔の周りに青い矩形を描画します。
まとめ
今回は、OpenCV入門として、基本的な画像操作の方法を紹介しました。OpenCVは、画像の読み込み、表示、保存に加え、リサイズや回転、切り抜き、色空間の変換、ぼかしなどの操作が可能です。これらの操作を活用することで、画像処理の基礎を理解し、さまざまな応用に取り組むことができます。
次回予告
次回は、画像の前処理について解説します。リサイズ、正規化、フィルタリングなどの手法を詳しく紹介します。
注釈
- Haar特徴分類器:画像中の特徴を抽
出するための方法の一つで、主に顔検出などで使用されます。
- ガウシアンブラー:画像を滑らかにするために使用されるフィルタで、ガウス分布に基づいてぼかしを適用します。
- 色空間変換:画像の色の表現方法を変える操作。たとえば、BGRからHSVへの変換など。
コメント