【0から学ぶAI】第273回:OpenCV入門

目次

前回のおさらいと今回のテーマ

こんにちは!前回は、画像データの扱い方について解説しました。画像のピクセルデータの基本と、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は、画像の読み込み、表示、保存に加え、リサイズや回転、切り抜き、色空間の変換、ぼかしなどの操作が可能です。これらの操作を活用することで、画像処理の基礎を理解し、さまざまな応用に取り組むことができます。

次回予告

次回は、画像の前処理について解説します。リサイズ、正規化、フィルタリングなどの手法を詳しく紹介します。


注釈

  1. Haar特徴分類器:画像中の特徴を抽

出するための方法の一つで、主に顔検出などで使用されます。

  1. ガウシアンブラー:画像を滑らかにするために使用されるフィルタで、ガウス分布に基づいてぼかしを適用します。
  2. 色空間変換:画像の色の表現方法を変える操作。たとえば、BGRからHSVへの変換など。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

株式会社PROMPTは生成AIに関する様々な情報を発信しています。
記事にしてほしいテーマや調べてほしいテーマがあればお問合せフォームからご連絡ください。
---
PROMPT Inc. provides a variety of information related to generative AI.
If there is a topic you would like us to write an article about or research, please contact us using the inquiry form.

コメント

コメントする

目次