スキルUPの道しるべ

本サイトはプロモーションを含みます
上に戻る

【Python&OpenCV】グレースケール画像の判定方法を例付きでわかりやすく解説!

本記事では、Pythonを使ってOpenCVでグレースケール画像かどうかを判定する方法について解説します。

画像処理に慣れていない方でも理解できるよう、丁寧に説明していきますので、ぜひ最後まで読んでみてください。

グレースケール画像とは?

グレースケール画像とは、白から黒までの明度のみで構成された画像です。

RGB画像(カラー画像)と異なり、各ピクセルは赤、緑、青の3つの値ではなく、1つの明度値で表現されます。

そのため、カラー画像に比べてデータ量が少なく、計算処理も軽量です。

OpenCVでグレースケール画像を判定する方法

OpenCVを使って画像がグレースケールかどうかを判定するには、RGBチャンネルの値がすべて同じかどうかを確認する方法が一般的です。

具体的な手順を見ていきましょう。

OpenCVによる画像処理入門』で基礎の確認から応用した使い方まで学ぶことができます。本記事とあわせて、ぜひ、チェックしてください。

使用する画像について

今回使用する画像は、「sample.png」というバスケットに盛られた金のリンゴのイラストです。

この画像を用いて、実際にグレースケールかどうかを判定してみます。

手順1: 画像の読み込み

まず、OpenCVを使って画像を読み込みます。以下のコードは、PythonにおいてOpenCVを使用して画像を読み込む方法です。

import cv2

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

# 画像の表示(確認用)
cv2.imshow('Original Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

ここで、cv2.imread()は画像を読み込むための関数です。この関数は画像をNumPy配列として読み込みます。cv2.imshow()を使うことで、画像が正しく読み込まれているか確認できます。

手順2: グレースケール判定ロジックの実装

画像がグレースケールかどうかを判定するためのロジックを実装します。以下のコードでは、RGBチャンネルの値が全て同じであるかを確認し、その結果を出力します。

import cv2
import numpy as np

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

# 画像がカラーかどうかを判定
if len(image.shape) == 3:
    # 各ピクセルがグレースケールかどうかを確認
    if np.all(image[:,:,0] == image[:,:,1]) and np.all(image[:,:,1] == image[:,:,2]):
        print('この画像はグレースケールです。')
    else:
        print('この画像はカラー画像です。')
else:
    print('この画像は既にグレースケールです。')

このコードでは、image.shapeを使って画像の次元数を確認します。

次元が3であればカラー画像、2であればグレースケール画像です。

さらに、np.all()を使って各ピクセルのRGB値がすべて同じかどうかを確認します。

実行結果の確認

上記のコードを実行すると、結果が以下のように表示されます。

  • RGBの値がすべて同じ場合:「この画像はグレースケールです。」と表示
  • RGBの値が異なる場合:「この画像はカラー画像です。」と表示

このようにして、画像がグレースケールかどうかを簡単に判定することができます。

手順3: グレースケール画像の表示

グレースケール判定が終わった後、画像を実際にグレースケール化して表示することもできます。

次のコードで、画像をグレースケールに変換し表示してみましょう。

import cv2

# 画像をグレースケールに変換
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# グレースケール画像の表示
cv2.imshow('Grayscale Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.cvtColor()関数を使って、カラー画像をグレースケール画像に変換します。

実行結果:

この処理により、画像がグレースケールで表示されます。

グレースケール画像判定の応用

グレースケール画像かどうかを判定する方法を理解したら、これを応用して特定の処理を行うことも可能です。

たとえば、カラー画像の場合のみフィルター処理を行う、あるいはグレースケール画像の場合のみエッジ検出を行うといった実装が考えられます。

if len(image.shape) == 3:
    print('カラー画像として処理します。')
    # フィルター処理や他の操作をここで行う
else:
    print('グレースケール画像として処理します。')
    # エッジ検出などの操作をここで行う

このように、画像の特性に応じた柔軟な処理が可能になります。

関連・おすすめ書籍

まとめ

この記事では、OpenCVを使用してPythonで画像がグレースケールかどうかを判定する方法を解説しました。

グレースケール画像は、特に画像処理や機械学習の前処理として重要な役割を果たします。

▼必見(ChatGPTを活用!おすすめAI副業)▼

今なら5000円分の特典あり!! dodgsonblog.com