图像处理-Gamma变换

Gamma变换: y=x^gamma;
gamma>1, 较亮的区域灰度被拉伸,较暗的区域灰度被压缩的更暗,图像整体变暗;
gamma<1, 较亮的区域灰度被压缩,较暗的区域灰度被拉伸的较亮,图像整体变亮;
参考:
http://blog.csdn.net/lxy201700/article/details/24929013

#include
#include
#include  
#include
using namespace cv;  
using namespace std;  
// get Gamma transformation look up table
void GetGammaTransLUT(uchar *pLUT, float Gamma, int iLUTLen)
{
    for(int i=0;ipow((float)i/255.0,Gamma)*255);
    }
}
void GammaTrans(uchar *pSrc, uchar *pDst, const int iHeight,
                const int iWidth, float Gamma)
{
    uchar *pLUT=new uchar[256];
    GetGammaTransLUT(pLUT,Gamma,256);
    for(int i=0;idelete []pLUT;
}
int main()
{
    Mat image=imread("C:\\迅雷下载\\图像处理\\Projects\\MyOpenCV\\MyOpenCV\\DIP3ECH06\\Fig0638(a)(lenna_RGB).tif",0); 
    Mat image_Dst=imread("C:\\迅雷下载\\图像处理\\Projects\\MyOpenCV\\MyOpenCV\\DIP3ECH06\\Fig0648(b)(lenna-noise-G-gauss-mean0-var800).tif",0); 
    const int iHeight=image.rows;
    const int iWidth=image.cols;
    uchar* pSrc=image.data;//new uchar[iHeight*iWidth];
    uchar* pDst=image_Dst.data;//new uchar[iHeight*iWidth];
    GammaTrans(pSrc,pDst,iHeight,iWidth,2);
    //namedWindow("Origin",1);
    imshow("Origin",image);
    //创建一个名字为“Lena”的图像显示窗口,(不提前声明也可以)  
    //namedWindow("Gamma Trans",1);  
    //显示图像  
    imshow("Gamma Trans",image_Dst);  
    //等待按键  
    waitKey();  
    return 0;  
}

图像处理-Gamma变换_第1张图片

你可能感兴趣的:(图像处理,数字图像处理,图像处理,Gamma变换)