はじめに
画像の明るさを知りたいなと思い、OpenCVを使えば取得できるような話を聞いたので試しに調べでやってみました。
OpenCVを使って画像からHSV(色相/彩度/明るさ)情報を取り出せるので、そこから画像のおおよその明るさを調べることができそうです。
やったこと
ファイルをを読み込んで明るさのヒストグラムをファイル出力します。画面には平均値と標準偏差を出力させます。
import cv2
import numpy as np
from matplotlib import pyplot as plt
file = 'test.jpg'
#画像を読み込んでHSV形式に変換
img = cv2.imread(str(file))
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h,s,v = cv2.split(hsv)
#ヒストグラムをファイル出力
plt.hist(v.ravel(),256,[0,256]);
plt.savefig("Brightness_hist.png")
#明るさの平均値と標準偏差を画面表示
print("mean: " + str(np.mean(v)))
print("std : " + str(np.std(v)))
実行結果1
フィンランドの夜の画像です。マクドナルドの看板がまぶしいですが夜なので暗いです。
mean: 70.97144158681233
std : 64.48446228449781
値が少ない箇所が突出していて、平均値が70くらいです。なんとなく暗めの画像だというのがわかります。
実行結果2
フィンランドの昼の画像です。雪景色で日中なので明るくなりそうです。
mean: 154.91464773813883
std : 57.38790912426793
値が大きい箇所に集まっていて、平均値が155くらいです。なんとなく明るめ画像だという事がわかります。