【Python】画像の明るさ調整|OpenCVによるガンマ補正

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ
  • Pythonによる画像処理に興味がある。
  • OpenCVのガンマ変換技法をもとに「画像の明るさ」を調節したい。
目次

OpenCVとは

OpenCV(Open Source Computer Vision Library)とは、画像処理やコンピュータビジョンの分野で広く活用されているオープンソースライブラリです。画像データの数値処理に強いのが特徴であり、高度な統計アルゴリズムも多数含まれていることから、近年機械学習の分野でも広く利用されています。

画像の明暗調節|OpenCVによるガンマ補正とは

画像・映像の入出力機器の特性を示す指標として、ガンマ値(γ値)というものがあります。ガンマ値とは、入出力機器の信号と画素の輝度の関係を示したものです。

入出力機器が画像・映像を出力する際、色の明暗を正しく出力できるようにガンマ値を補正することをガンマ補正といいます。

【Python実践】OpenCVのガンマ補正による画像の明るさ調節

PythonのOpenCVライブラリを用いてガンマ補正を適用し、画像の明るさ調節する場合、次のようなコードを記述します。

画像読込部分の画像ディレクトリを修正した上でコードを実行してみましょう。

明るくする場合(γ>1)

画像を明るくして出力したい場合は、gammaを1より大きい値に設定します。

import cv2
import numpy as np

# 画像読込
img = cv2.imread("image_data.jpg")

"""
**********************************************************
【ガンマ補正の公式】
  Y = 255(X/255)**(1/γ)

【γの設定方法】
  ・γ>1の場合:画像が明るくなる
  ・γ<1の場合:画像が暗くなる
**********************************************************
"""

# ガンマ変換用の数値準備 
gamma     = 3.0                               # γ値を指定
img2gamma = np.zeros((256,1),dtype=np.uint8)  # ガンマ変換初期値

# 公式適用
for i in range(256):
    img2gamma[i][0] = 255 * (float(i)/255) ** (1.0 /gamma)

# 読込画像をガンマ変換
gamma_img = cv2.LUT(img,img2gamma)

# 画像を表示
cv2.imshow("img",img)           # オリジナル画像
cv2.imshow("gamma",gamma_img)   # ガンマ変換後の画像
cv2.waitKey(0)
cv2.destroyAllWindows()

暗くする場合(γ<1)

画像を暗くして出力したい場合は、gammaを1より小さい値に設定します。

import cv2
import numpy as np

# 画像読込
img = cv2.imread("image_data.jpg")

"""
**********************************************************
【ガンマ補正の公式】
  Y = 255(X/255)**(1/γ)

【γの設定方法】
  ・γ>1の場合:画像が明るくなる
  ・γ<1の場合:画像が暗くなる
**********************************************************
"""

# ガンマ変換用の数値準備 
gamma     = 0.3                               # γ値を指定
img2gamma = np.zeros((256,1),dtype=np.uint8)  # ガンマ変換初期値

# 公式適用
for i in range(256):
    img2gamma[i][0] = 255 * (float(i)/255) ** (1.0 /gamma)

# 読込画像をガンマ変換
gamma_img = cv2.LUT(img,img2gamma)

# 画像を表示
cv2.imshow("img",img)           # オリジナル画像
cv2.imshow("gamma",gamma_img)   # ガンマ変換後の画像
cv2.waitKey(0)
cv2.destroyAllWindows()

【参考】Python・OpenCVを用いた画像処理

当サイトでは、PythonのOpenCVライブラリを用いた画像処理ノウハウを多数公開しています。

用途【Python×OpenCV】記事名
画像変換画像のリサイズ・拡大・縮小
画像変換画像の回転・反転・平行移動|アフィン変換
画像変換画像の明るさ調節|ガンマ補正
画像変換グレースケール・HSV・L*a*b|色空間の変換
画像変換モノクロ(白黒)画像変換|2値化処理
画像変換ヒストグラムの描画・ヒストグラム均一化処理
画像変換画像上にテキスト・図形(直線・長方形・円)を描画
画像変換画像の透視変換・遠近法
画像変換画像のノイズ除去・平滑化
画像変換画像の畳み込み(空間フィルタリング)
特徴抽出エッジの検出方法

画像認識や物体検出を学ぶ上でおすすめの教材はこちらをご参考ください。

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
目次