【OpenCV】ガンマ補正

OpenCVにはcvGammaのようなガンマ補正の関数は無いのですが、ルックアップテーブルを使った輝度値変換の関数(cvLUT)はあるので、これを使ってガンマ補正を行いたいと思います。

 

以下、ガンマ補正のサンプルプログラムです。OpenCV2.2を用いて、作成しています。

 

// gamma-correction.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"

//プロジェクトのプロパティ⇒C/C++⇒全般 の追加のインクルードディレクトリに
// 『C:\OpenCV2.2\include』を追加のこと
#include "opencv2\\opencv.hpp"

#ifdef _DEBUG
    //Debugモードの場合
    #pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_core220d.lib")
    #pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_imgproc220d.lib")
    #pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_highgui220d.lib")
#else
    //Releaseモードの場合
    #pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_core220.lib")
    #pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_imgproc220.lib")
    #pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_highgui220.lib")
#endif

//---------------------------------------------------------------
//【関数名 】:cv_Gamma
//【処理概要】:ガンマ補正
//【引数  】:src        = 入力画像
//      :dst        = 出力画像
//      :gamma   = ガンマ補正値
//【戻り値 】:なし
//【備考  】:モノクロ/カラー対応可
//      :カラーの場合はRGB全て同じガンマ補正値
//---------------------------------------------------------------
void cv_Gamma(IplImage* src, IplImage* dst, double gamma){

	int i;

	uchar LUT[256];

	//ガンマ補正テーブルの作成
	for (i = 0; i < 256; i++)
	{
		LUT[i] = (int)(pow((double)i / 255.0, 1.0 / gamma) * 255.0);
	}

	//CvMatへ変換
	CvMat lut_mat = cvMat(1, 256, CV_8UC1, LUT);

	//ルックアップテーブル変換
	cvLUT(src, dst, &lut_mat);
}

int _tmain(int argc, _TCHAR* argv[])
{

	//画像データの読込
	IplImage* src = cvLoadImage("Girl.bmp", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
	if (src == NULL){
		return 0;
	}

	//表示ウィンドウの作成
	cvNamedWindow("src");
	cvNamedWindow("dst");

	//処理後画像データの確保
	IplImage* dst = 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-correction-opencv-sample.zip

(OpenCV2.2対応。Visual Studio 2010 C++ Expressにより作成)

 

実行例

【OpenCV】ガンマ補正

 

OpenCV2.2の使用方法および、ガンマ補正については下記のページを参照下さい。

 

OpenCVへ戻る

 



web拍手 by FC2

関連記事、スポンサーリンク

スポンサーリンク

カテゴリー: OpenCV  タグ: , . Bookmark the permalink.

【OpenCV】ガンマ補正 への1件のフィードバック

  1. ピンバック: Simple and fast Gamma Correction on OpenCV | undecided

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です