Python版OpenCVのLUT(ルックアップテーブル)でガンマ補正(変換)を高速化する方法についてソースコード付きで解説します。
LUT(ルックアップテーブル)とは
ガンマ補正は、画像のコントラストを調節し、視認しやすくするのによく使われています。
原理については、以下ページで解説しています。

【画像処理】ガンマ補正の原理・計算式
画像処理におけるガンマ補正(非線形濃度変換)の原理や仕組みについてまとめました。
LUT(ルックアップテーブル)とは、「画素値0~255の各入力値に対して、出力値が0~255のいずれになるかを示す変換表をあらかじめ作成し、画像の濃度変換をおこなうときの計算を省略することで処理を高速化する」手法です。
例えば、画素値を半分にする場合、LUT(ルックアップテーブル)は次のようになります。
入力値 | 出力値 |
---|---|
0 | 0 |
1 | 0 |
… | … |
127 | 63 |
… | … |
255 | 127 |
表の作成は、入力画像のサイズによらず256回の計算で済みます。
HDサイズ(1280×720)の場合、画素数は921,600個なので、画像の濃度変換を普通に行うとおうとすると、計算回数は921,600回となってしまい。計算量が大きくなります。
そこで、LUTを使えば、「256回の計算」と「921,600回の参照」で済むためトータルの計算コストを抑えることができます。
ガンマ補正など、計算式が複雑になるほど効果が大きくなります。
今回は、Python言語+OpenCV+NumPyを用いてLUTによりガンマ補正を実装してみました。
動画解説版
本ページの内容は以下動画でも解説しています。
サンプルコード
サンプルプログラムのソースコードです。
■入力画像(右)、出力画像(右)
関連ページ

【PythonとOpenCVで画像処理超入門】使い方とサンプルコードを解説
Python版OpenCVで画像処理プログラミングを行う方法を入門者向けにソースコード付きで解説するページです。

【画像処理入門】アルゴリズム&プログラミング
画像処理における基本的なアルゴリズムとその実装例(プログラム)についてまとめました。
コメント