画像のコントラストと明るさ

人気のある映像の明るさは、画像の明るさレベル、デジタル画像であることを理解  F(X、Y)= I(X、Y)R&LT(X、Y)  、[0,255]の間のグレー値と、  Fの  値は、より0に近い低い輝度は、Fの  値が255より高い輝度に近くなります。そして、我々は、最高と最低階調グレーレベル差の間のコントラストを指す上述したように、明るさとコントラストを区別します。

彩度は、色の種類画像の数を指し、上記画像のグレーレベルが[値Lmin、Lmaxの]が、その後、複数の中間値Lminで、Lmaxとは、複数の色を表すことになる画像の種類は、それがさらに飽和であります高い、外観は彩度を調整することができる、より鮮明な画像を表示しますかオーバーは十分に露光画像を補正しません。画像がより自然に見えるように

 

デジタル画像を変換元の画素のグレーレベルが設定されて  F(I、J)に、画素グレー  G(I、J) 線形変換は、一般的である  G(i、j)はAF = (I、J )+ B、画像コントラスト、画像の明るさの影響係数Bへの影響係数、次のように:
(1)= 1のときの画像であり、
(2)A> 1コントラスト強調、画像はより明確に表示されたときに、
( 3)<1つのときにコントラスト低下、画像が暗く見える;
(4)B B(Bの増加に伴って、画像の明るさに影響>全体画像の階調値を、A(B> 0)B 0)および還元シフトアップまたはダウン、つまり、画像全体が明るくまたは暗くなり、画像のコントラストを変更しないであろう

 共通コード:

OpenCVの画像データは、データのマット型に格納され、我々は、ピクセルのRGB構成が存在することを知って、それがマットは3次元配列であり、マット画像の画素を得ることが簡単です。

コードをコピー
//三个循环ため、执行运算new_image(I、J)*の画像(I、J)+ bは= 
       ため(INT Y = 0; Y <image.rows; Y ++)
       { 
              (int型のx = 0であり、X <image.colsあり; x ++)
              { 
                     ため(INT C = 0; C <3; C ++)
                     { 
                            new_image.at <Vec3b>(Y、X)[C] = saturate_cast <UCHAR>((g_nContrastValue * 0.01)*(画像.AT <Vec3b>(Y、X)[C])+ g_nBrightValue)。
                     } 
              } 
       }
コードをコピー// 対応する; g_nContrastValueコントラスト、g_nBrightValu輝度である G(I、J)= AF(I、J)+ B 、画像のコントラストに影響係数は、画像の明るさの係数bに影響を与えます。

上記コードimage.at <Vec3b>(Y、X  )[C] 、YはXがCはR、G、B(0に対応する、1)であり、画素列であり、画素の列でありますA。

saturate_castセキュリティ変換動作の結果については、結果がsaturate_castを変換して、それが有効な値であることを確認するために、画素値範囲(オーバーフロー)(それはフローティングされている場合)、それはまた非整数であってもよいが超えてもよいです。

コードは以下の通りであります:

// ----------------------------------- [セクション]ヘッダが含まれてい------- --------------------------------
 //   説明:プログラム・ファイルのヘッダーが依存含ま
 // ----- -------------------------------------------------- --------------------------------------- 
する#include <opencv2 /コア/ core.hpp> 
書式#include <opencv2 /のHighGUI / highgui.hpp> 
の#include " opencv2 / imgproc / imgproc.hpp " 
の#include <iostreamの> // --------------------- -------------- [部] ------------------------------名前空間宣言---------
 //   説明:名前空間が使用される手順が含まれています
 // ---------------------------- -------------------------------------------------- -----------------    使用して名前空間


 STD;
 使用して 名前空間CV; 

// ----------------------------------- [グローバル]関数宣言の一部- -------------------------------------
 //   説明:グローバル関数の宣言
 // ---- -------------------------------------------------- ----------------------------------------- 
静的 無効 ContrastAndBright(int型無効 * ) ; 

// ----------------------------------- [セクション] ------グローバル変数宣言--------------------------------
 //   説明:グローバル変数の宣言
 // --------- -------------------------------------------------- ------------------------------------ 
int型 g_nContrastValue; // コントラスト値
INT g_nBrightValue;   // 輝度値
マットg_srcImage、g_dstImage;
 // ----------------------------------- [ main()関数] --------------------------------------------
 / /   説明:エントリ機能コンソールアプリケーション、私たちのプログラムは、ここから始まる
 // ------------------------------- -------------------------------------------------- -------------- 
INT メイン()
{ 
    // 前景と背景色コンソール変更 
    システム(色2F。);
     //は、供給されたユーザの画像を読み取るを 
    g_srcImage関数imread =(" E:\\ \\ vs2015 VS2015Opencvプロジェクト\\ \\ \\はcat.jpgピクチャー" );
     IF(g_srcImage.data){のprintf(!" エラー画像g_srcImage〜\ N-を読む!"); 戻り falseに;} 
    g_dstImage = マット::ゼロ(g_srcImage.size()、g_srcImage.type()); 

    // 設定コントラストとの初期値明る 
    g_nContrastValue = 80 ; 
    g_nBrightValue = 80 ; 

    // ウィンドウの作成 
    (namedWindowを" 【効果】図ウィンドウ"1 ); 

    //は、トラックバー作成 
    createTrackbar(" コントラスト:"" [効果]図ウインドウ"、&​​g_nContrastValue、300 、ContrastAndBright)を、
    createTrackbarを("明るさ:"" [効果]図ウィンドウ"、&​​g_nBrightValue、200は、ContrastAndBright); 

    //は、コールバック関数呼び出し 
    ContrastAndBright(g_nContrastValue、0 ); 
    ContrastAndBright(g_nBrightValue、0 ); 

    // 出力いくつかのヘルプ情報 
    COUT << <<てendlは\ tは成功し、画像効果を調整するためのスクロールバーがN- \ N- \観察走る 
        << \ tのプレス」Q「キー、プログラムが終了するには、N- \ ; 

    // あなたは「Q」キーを押したときプログラムは終了します
    しばらくCHAR(waitKey(1))!= ' Qを'){}
     戻り 0 0; 
} 

// ----------------------------- [ContrastAndBright()関数] ----------- -------------------------
 //   説明:コールバック関数は、画像のコントラストと明るさ値を変更
 // ---------- -------------------------------------------------- ----------------------------------- 
静的 無効 ContrastAndBright(int型無効 * 
{ 

    // ウィンドウ作成 
    namedWindowを(" [オリジナル】図ウインドウ"1 ); 

    // 算術g_dstImageを行うための3つのループ(I、J)* g_srcImage(I、J)+ B = 
    ためINT = Y; Y <g_srcImage.rows。Y ++ 
    { 
        ためint型のx = 0 ; X <g_srcImage.colsあり; x ++ 
        { 
            ためINT C = 0 ; C < 3 ; C ++ 
            { 
                g_dstImage.at <Vec3b>(Y、X)[C] = saturate_cast < UCHAR>((g_nContrastValue * 0.01)*(g_srcImage.at <Vec3b>(Y、X)[C])+ g_nBrightValue)。
            } 
        } 
    } 

    // 显示图像 
    関数imshow(" 【原始图窗口】" 、g_srcImage)。
    imshowを("[効果]図ウインドウ、g_dstImage); 
}

レンダリング:

 

おすすめ

転載: www.cnblogs.com/fcfc940503/p/11259444.html