【OpenCV】ガンマ補正

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

 

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

#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により作成)

 

実行例

 

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

 

OpenCVへ戻る

 

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

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

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください