今回はPythonの画像・動画処理ライブラリであるOpenCVを使って、読み込んだ画像の輝度値を取得する方法を紹介します。
画像の輝度値を取得する
事前準備
PythonにOpenCVをインストールしていない方は下記コマンドでOpenCVをインストールすることができます。
pip install -U opencv-python
1. 画像を読み込む
今回は画像処理でよく使われる「Lena.jpg」という画像を作業フォルダ内に置きました。
まずはこの画像の高さと横幅、チャンネル数を取得するためのサンプルコードで取得しましょう。
import cv2
path_image = "Lena.jpg"
image = cv2.imread(path_image)
height, width, channel = image.shape
print(height, width, channel)
# 実行結果
# 225 400 3
これでheight, width, channelにそれぞれ画像の高さと横幅、チャンネル数を格納することができました。
channelに3が格納されているのは、「この画像の色はRGBの3次元で表現していますよー」ということを表しています。
2. 画像のRGB値を取得する
次に画像の輝度値を計算するのに必要なRGB値を取得します。
例えば画像の一番左上のRGB情報を取得するには次のようなコードで実装できます。
import cv2
path_image = "Lena.jpg"
image = cv2.imread(path_image)
height, width, channel = image.shape
blue = image[0, 0, 0]
green = image[0, 0, 1]
red = image[0, 0, 2]
print(blue, green, red)
# 実行結果
# 53 70 109
画像のRGB値を一括取得する
画像中のある画素(height, width)のRGB情報をまとめて取得したい場合は下記コードで実現できます。
color = image[height, width, :]
ここで注意しなければいけないのが変数colorには(height, width)のRGB値がBGR(青、緑、赤)の順序で格納されている点です。
これを忘れると適切に画像処理をすることができなくなるので注意しましょう。
3. 輝度値を計算する
ここまでの処理で画像のRGB値を取得することができたので、ここからは実際に輝度値を計算してみましょう。
RGB値を使って輝度値を求めるには以下3つの計算式があります。(参考:RGB色相と輝度)
- \(\frac{1}{3} \times R + \frac{1}{3} \times G + \frac{1}{3} \times B\)
- \(\frac{1}{4} \times R + \frac{1}{2} \times G + \frac{1}{4} \times B\)
- \(0.299 \times R + 0.587 \times G + 0.114 \times B\)
今回は一番上の計算式を使って輝度値を計算します。以下サンプルコードです。
import cv2
path_image = "Lena.jpg"
image = cv2.imread(path_image)
height, width, channel = image.shape
blue = image[0, 0, 0]
green = image[0, 0, 1]
red = image[0, 0, 2]
blightness_value = blue*(1/3) + green*(1/3) + red*(1/3)
print(blightness_value)
# 実行結果
# 77.33333333333333
まとめ
今回はPythonの画像・動画処理ライブラリであるOpenCVを使って、読み込んだ画像の輝度値を取得する方法を紹介しました。
この記事で不明な点や気になるところがあれば下のコメント欄までお願いします。それではまた!
コメント