opencvでカメラから画像を撮り、表示するプログラムを作りました。
その際に、撮った写真の明るさを変更して表示したいと思い、
輝度値の変更や、ガンマ補正の方法を探していました。
以下のサイトを見つけ参考にしているのですが、どの数値を変更すると
明るさが変わるなどの処理が分かりません。
詳しく教えていただけたらと思います。
特に、ガンマ補正テーブルの作成部分の数字の意味、
ガンマ補正の2.0の意味をお願いします。
よろしくお願いします。
また、プログラムをのせます。
//--------------------------------------------------------------- //【関数名 】: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; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/06 06:20
2016/07/06 06:44
2016/07/08 03:06