Pythonでいろいろやってみる

Pythonを使った画像処理や機械学習などの簡単なプログラムを載せています。

アジサイの写真を明るく鮮やかにする

アジサイの写真を明るく鮮やかにします。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 : 画像をファイルに保存
環境
  • windows10 home
  • jupyter notebook 6.3.0
  • Python 3.8.8
  • OpenCV 4.0.1
準備

画像ファイルはフリー写真素材ぱくたそからダウンロードさせていただき、jupyter notebookファイル(***.ipynb)と同じディレクトリにファイル名'ajisai.jpg'で保存しました。
f:id:T_A_T:20210822212230j:plain

コード

ルックアップテーブルにより彩度(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)  # 画像を保存
実行結果

写真が明るく鮮やかに変換されました。
f:id:T_A_T:20210822212304j:plain

ブログランキングに参加しています

にほんブログ村 IT技術ブログへ
にほんブログ村