質問: cvCreateImage(cvGetSize(src), src->depth, src->nChannels); //ガンマ補正 cv_Gamma(src, dst, 2.0); //画像の表示 cvShowImage ("src", src); cvShowImage ("dst", dst); //キー入力待ち cvWaitKey (0); //全てのウィンドウの削除 cvDestroyAllWindows(); //画像データの解放 cvReleaseImage(&src); cvReleaseImage(&dst); return 0; } ```
回答: ガンマ補正 そのものの説明は、 こちらのページ が図解付きでお勧めです。 > > どの数値を変更すると明るさが変わるなどの処理が分かりません。 > > > ガンマ補正のパラメータは γ(gamma) しか存在しません。明るさの調整はこの値を変更することになります。 > > 特に、ガンマ補正テーブルの作成部分の数字の意味 > > > ガンマ補正では、係数`gamma`を与えたとき、入力値`IN`に対して出力値`OUT`を次の式で計算します。`IN`は画素(pixel)の明るさを表しており、8bit/pixelデータでは0~255の範囲になります。 ``` OUT = pow(IN, 1 / gamma) ``` 画像全体に対するガンマ補正では上式を全画素に適用していくのですが、全ての画素に対して計算するのはコストが高いため、ここではルックアップテーブル(LUT; Look Up Table)を事前準備しています。`LUT`配列を使うことで、各画素に対するガンマ補正は次のように単純化されます。(これは`cvLUT`関数の内部処理です) ``` OUT = LUT[IN] ```