Atom's tech blog

OpenCVで暗い画像を明るくしてみた(γ補正)

概要

  • γ補正とは画像を自然の色に近くなるように、明るさ(輝度)や彩度を調整することらしい
  • 今回試したのは1.4/1.8/2.0/2.4/2.8の5パターンのγ値
  • OpenCVのLUTを使用して配列を変換

コメント

  • 仕事で物の影で見たい箇所が暗くなってしまい、何かいい方法がないか探していたところ、γ補正のサンプルコードを発見して試してみた(他にも方法があるかもしれません)
  • 掲載したソースは「Mac」で動作確認済み(ラズパイでも動作するはず)
  • 使ったツールバージョンは以下
  • MacOS Mojave / python3.5.6 / Opencv3.4.2 / VS code1.38.1

ファイル構成

  • ./image/image_before.jpg : 変換前の画像ファイル
  • ./change_image : 画像ファイル変換後に格納するフォルダ
  • gamma_correction.py : γ補正ソースファイル(下のソースコード

ソースコード

import cv2
import numpy as np

################################
# γ補正メソッド                  #
################################
def gamma_correction(image,gamma):
    # γ値毎にファイル名を分ける
    file_name = './change_image/gamma_image_'+str(gamma)+'.jpg'
    # 整数型で2次元配列を作成[256,1]
    lookup_table = np.zeros((256, 1), dtype = 'uint8')
    for loop in range(256):
        # γテーブルを作成
        lookup_table[loop][0] = 255 * pow(float(loop)/255, 1.0/gamma)
    ######################################
    # lookup Tableを用いて配列を変換        #
    ######################################
    image_gamma = cv2.LUT(image, lookup_table)
    # 変換後のファイルを保存
    cv2.imwrite(file_name, image_gamma)

# 画像ファイル
image_before_file = './image/image_before.jpg'
# 変換前の画像データ読み出し
image_before = cv2.imread(image_before_file, cv2.IMREAD_COLOR)
# ガンマ値
gamma_correction(image_before,1.4)
gamma_correction(image_before,1.8)
gamma_correction(image_before,2.0)
gamma_correction(image_before,2.4)
gamma_correction(image_before,2.8)

print(" Gamma Correction Change End.....")

イメージ画像

■ 元の画像

f:id:iAtom:20201008141118j:plain

■ γ=1.4

f:id:iAtom:20201008141102j:plain

■ γ=1.8

f:id:iAtom:20201008141230j:plain

■ γ=2.0

f:id:iAtom:20201008141206j:plain

■ γ=2.4

f:id:iAtom:20201008141252j:plain

■ γ=2.8

f:id:iAtom:20201008141156j:plain

今度は彩度、コントラストにトライしてみようかな。