OpenCVの使い方入門 輝度平滑化のやり方解説
画像処理ライブラリ OpenCV で輝度平滑化を実施するやり方解説
近年人気のある画像処理ライブラリであるOpenCVを使った輝度平滑化を行っていこうと思います。
輝度平滑度は画像内にある輝度が一部に偏っている場合はその部分を広げて見やすくする技術です。私がたまにお邪魔させていただいている勉強会ではこの輝度平滑化を使ったアプリケーションを作った人がいます。なんでも完成車メーカに納品したとかで,結構すごい実績だなと思った経験があります。
OpenCVによる輝度平滑化プログラミングを紹介 (Python)
OpenCVは非常に人気のある画像処理アルゴリズムです。簡単に接続したカメラから画像をアプリケーションに読み込めますし,主要な画像処理はほぼ簡単なプログラミングで実装できます。
画像処理の基本についてはこちらの記事で,OpenCVによる画像の読込などはこちらの記事で紹介していますので是非見ていってください。
早速OpenCVによる画像の輝度平滑化方法を紹介していこうと思います。使用するプログラミング言語はPythonです。
まず,ベースとなる画像は私の個人的趣味で2020年10月時点で絶賛大人気のVTuberである常闇トワ様の画像を使用させていただきます。画像処理の世界ではLennaという女優の画像がよく使われています。ほぼすべての参考書で活用される位人気なのですが,やはりIT業界でも美人の方が見たいんでしょうね。
こちらの画像をC:\Temp\towa.jpgという名前で保存して以下のプログラムを実行するだけで輝度を平滑化した画像を保存する事ができます。
import cv2
img = cv2.imread('C:/Temp/towa.jpg',cv2.IMREAD_GRAYSCALE) #これでimgにグレースケール画像が入
cv2.imwrite('C:/Temp/Gray.jpg',img) #グレースケール画像を保存
kido = cv2.equalizeHist(img) #輝度を平滑化する
cv2.imwrite('C:/Temp/kido.jpg',kido) #画像を保存
はい,すごい簡単ですよね。この程度のコーディングだけで輝度の平滑化ができるほどOpenCVは便利です。ちなみに,輝度平滑化はグレースケール画像に対してのみ実施できます。そのため,cv2.imreadをするさいに引数にcv2.IMREAD_GRAYSCALEを含める必要がある事だけご注意ください。
左側の画像がグレースケールで読み込んだ元画像です。また右側の画像がグレースケール画像を輝度平滑化した画像です。こう見ると元のグレースケール画像のほうがかなり明るくて,輝度平滑後の画像は服など一部の暗い部分に引っ張られて全体的に暗くなっているようです。でも輝度平滑後のほうがかわいいですね。
cv2.equalizeHistで指定できるパラメータ
前述したとおり,cv2.equalizeHistでグレースケール画像の輝度を平滑化できます。cv2.equalizeHistに指定できるパラメータは一個だけです。
cv2.equalizeHist(img)・・・画像データを2次元変換させる
- img・・・輝度を平滑化したい元画像。グレースケール画像じゃないとエラーがでる
この指定だけで簡単に実装できます。OpenCVってすごいですよね。
私のWEBサイトでは他にもOpenCVの機能を紹介していますので是非そちらも見ていってください。