opencv学习笔记-入门(24) gamma变换,矫正,压缩篇收藏

法一:

创建GAMMA查找表

void gammaLUT(double sigma)
{
double f;
for (int i = 0; i < 256; ++i)
{
f = (i+0.5)/256;
f = pow(f,sigma);
glut[i] = UINT8(f*256-0.5);
}
}

利用查找表进行矫正

void gammaCorrect(Mat& image)
{
assert(!image.empty());
gammaimg.create(image.size(),CV_64FC(image.channels()));


uchar *pd = image.ptr(0);
double *qd = gammaimg.ptr<double>(0);
for (int i = 0; i < image.rows * image.cols * image.channels(); i++)
{
*qd++ = (double)(glut[*pd++]);
}
}

法二:

直接构建查找表

// gamma compress LUT
static uchar* getGammaLUT()
{
static uchar gmLUT[256] = {0,1,1,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,
5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,
7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
14,14,14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,
15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,16,16,
16,16,16,16,16,16,16,16,16,16,16,16,16};
return gmLUT;
}

利用查找表进行数据的处理

void gammaCompress(Mat& image)
{
static uchar *pglut = getGammaLUT();

uchar *pd = image.ptr(0);
for (int i = 0; i < image.rows * image.cols * image.channels(); i++)
{
pd[i] = pglut[pd[i]];
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值