Python OpenCV3でソラリゼーション(階調を変換)
Python OpenCV3でソラリゼーション(Soralization)
ソラリゼーションを行うと、画像の一部分の濃淡が反転したような画像になる。
前提
 
元画像
ガンマ変換などと比較しやすいために、同じこの画像(sora2.jpg)を使う。
以前の例だとsource/imageディレクトリ配下に設置する。
ルックアップテーブル
ルックアップテーブルは以下のようなグラフを使う。
(実際にはyの値に100かけたものを使う。とりあえず曲線ならなんでもいいだろうという安易な考え。)
ソラリゼーション
ソラリゼーションは今回は以下の様な関数を使う。
sourceディレクトリ配下にsolarization.pyを作成する。
これまでと同様に事前にルックアップテーブルを作成し、OpenCV3のLUTメソッドの引数でルックアップテーブルを指定し、ソラリゼーションを行う。
# -*- coding: utf-8 -*- import cv2 import numpy as np if __name__ == '__main__': # ルックアップテーブルを作成するため変数の定義 solarization_const = 2 * np.pi / 255 # ルックアップテーブルの生成 """ array([[0], [0], [0], [0], [0], [0], [0], ・・・・・・・・ [0], dtype='uint8') のようなリストが生成される。 """ look_up_table = np.ones((256, 1), dtype = 'uint8' ) * 0 for i in range(256): look_up_table[i][0] = np.abs(np.sin(i * solarization_const)) * 100 # 画像の読み込み img_src = cv2.imread("./image/sora2.jpg", 1) # ソラリゼーション後の出力 img_sola = cv2.LUT(img_src, look_up_table) # 表示 cv2.imshow("Show SOLARIZATION Image", img_sola) cv2.waitKey(0) cv2.destroyAllWindows()
実行してみる。
(opencv_python)$ python solarization.py
空の色だけが反転しているのが見て取れる。