アジサイの写真を明るく鮮やかにする
アジサイの写真を明るく鮮やかにします。RGB色空間の画像を、色相(Hue)・彩度(Saturation)・明度(Value)からなるHSV色空間に変換し、OpenCVのLUT(ルックアップテーブルで)彩度(Saturation)・明度(Value)をガンマ補正することで鮮やかさと明るさを上げます。
関連記事
ルックアップテーブルによる画像コントラストの補正
ルックアップテーブルで画像の彩度、明度を調整する(画像を明るく鮮やかにする)
使った関数・メソッド
- cv2.imread : 画像ファイルの読み出し
- cv2.cvtColor : 色空間の変換
- cv2.COLOR_BGR2HSV) : BGR色空間→HSV色空間の変換
- cv2.COLOR_HSV2BGR) : HSV色空間→BGR色空間の変換
- cv2.split : チャネルごとの分割
- cv2.LUT : ルックアップテーブルの適用
- cv2.merge : チャネルの統合
- cv2.imread : 画像をファイルに保存
環境
準備
画像ファイルはフリー写真素材ぱくたそからダウンロードさせていただき、jupyter notebookファイル(***.ipynb)と同じディレクトリにファイル名'ajisai.jpg'で保存しました。
コード
ルックアップテーブルにより彩度(Saturation)・明度(Value)をガンマ補正しています(gamma = 1.5)
import cv2 import numpy as np img = cv2.imread('ajisai.jpg') # 画像の読み出し img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # BGRからHSVに変換 h, s, v = cv2.split(img_hsv) # チャンネルごとに分割 # ルックアップテーブルの生成 gamma = 1.5 look_up_table = np.zeros((256, 1) ,dtype=np.uint8) for i in range(256): look_up_table[i][0] = (i/255)**(1.0/gamma)*255 v_lut = cv2.LUT(v, look_up_table) # 明度(V)に対してルックアップテーブル適用 s_lut = cv2.LUT(s, look_up_table) # 彩度(S)に対してルックアップテーブル適用 img_merge = cv2.merge([h, s_lut, v_lut]) # H,変換後S,変換後Vをマージ img_bgr = cv2.cvtColor(img_merge, cv2.COLOR_HSV2BGR) # HSVからBGRに変換 cv2.imwrite('LUT.jpg', img_bgr) # 画像を保存
実行結果
写真が明るく鮮やかに変換されました。