[python]画像の明るさを判定する
概要
画像認識をしていて、画像の明るさを判定して分類したくなりました。
具体的には、室内で撮影しているのですが、電気が消えている(=人がいない)ときはアプリケーション的に判定しても無駄なので、そもそも判定する処理に入らないようにしたかったんです。
とうことで、撮影した画像の明るさを判定する手法を考えました。
方法
手順は以下の通りです。
画像をグレイスケールに変換し、2値にする
画像内の全成分を足し合わせる
画像サイズで規格化する
画像をグレイスケールにした場合、明るいところは値が大きくなり、暗いところは値が小さくなります。これを利用して、画像内の全成分を足して規格化したものをその画像の「明るさ」として判定に利用できます。
コードは以下の通りです。
def judgeLight(file):
img=cv2.imread(file, cv2.IMREAD_GRAYSCALE) #1 グレイスケールで読み込み
img=img.astype('float')
img/=255
sumGray=img.sum() #2 全成分を足し合わせ
meanGray=sumGray/(img.shape[0]*img.shape[1]) #3 規格化
return meanGray
試しにいくつかの画像で試してみます。
imgNames=glob.glob('*.png')
for imgName in imgNames:
m=judgeLight(imgName)
print(meanGray)
plt.figure()
plt.gray()
plt.imshow(img)
plt.show()
暗い画像の方が値が小さく出ていることがわかります。
あとは適当に閾値を決めて、暗い画像を弾けばOKです。
最後に
いろいろググっても出てこなかったので自分なりに考えましたが、もしかしたらもっとちゃんとした方法があるのかもしれません。
Commenti