質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

14423閲覧

opencvでの明るさ変更

yamata

総合スコア36

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2016/07/05 07:22

opencvでカメラから画像を撮り、表示するプログラムを作りました。
その際に、撮った写真の明るさを変更して表示したいと思い、
輝度値の変更や、ガンマ補正の方法を探していました。

以下のサイトを見つけ参考にしているのですが、どの数値を変更すると
明るさが変わるなどの処理が分かりません。

詳しく教えていただけたらと思います。
特に、ガンマ補正テーブルの作成部分の数字の意味、
ガンマ補正の2.0の意味をお願いします。

よろしくお願いします。

http://imagingsolution.net/program/opencv/gamma-correction/

また、プログラムをのせます。

//--------------------------------------------------------------- //【関数名 】: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; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

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]

投稿2016/07/06 03:46

編集2016/07/06 04:00
yohhoy

総合スコア6191

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamata

2016/07/06 06:20

ありがとうございます!勉強不足があったようです。 ガンマ補正の2.0の数字を変更することが、パラメータを変更することに なるという認識であっていますか? 特に、ガンマ補正テーブルの作成部分の数字の意味 →詳しくありがとうございます!分かりやすかったです!
yohhoy

2016/07/06 06:44

> ガンマ補正の2.0の数字を変更することが、パラメータを変更することになるという認識であっていますか? 正しいです。よくある数値だと1.8~2.2あたりですが、これ以外の数値(0以上)も指定できます。
yamata

2016/07/08 03:06

ありがとうございます!参考にします!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問