利用OpenCV进行图像伽马校正

伽马校正,最好的,最高效的方法是通过查找表Table来访问。

核心函数LUTLook UP Table):

这是最被推荐的用于实现批量图像元素查找和更该操作图像方法。在图像处理中,对于一个给定的值,将其替换成其他的值是一个很常见的操作,OpenCV 提供里一个函数直接实现该操作,并不需要你自己扫描图像,就是:operationsOnArrays:LUT() <lut> ,一个包含于core module的函数. 首先我们建立一个mat型用于查表:

Mat lookUpTable(1, 256, CV_8U);
uchar* p = lookUpTable.data; 
for( int i = 0; i < 256; ++i)
        p[i] = table[i];

然后我们调用函数 (I 是输入 J 是输出):

LUT(I, lookUpTable, J);

int main()  
{  
   IplImage* src = cvLoadImage("e:\\kankan\\fish.jpg", 0 );
IplImage* dst = cvCreateImage(cvGetSize(src), 8, 1);
   uchar table[256];

  CreatTable_Gamma( table, 0.5 );
   LUT_Adj(src,dst,table);
}
void CreatTable_Gamma(uchar table[], float nPercent )
{
	float val;
	for(int i=0;i<256;i++)
	{
		val= pow( (float)i/255.0f , nPercent)*255.0f;  
			if(val>255)  
				val=255;  
			if(val<0)
				val=0;
		table[i]=(uchar)val;
	}
}

void CreatTable_Gamma(uchar table[], float nPercent )
{
	float val;
	for(int i=0;i<256;i++)
	{
		val= pow( (float)i/255.0f , nPercent)*255.0f;  
	    table[i]=(uchar)val;
	}
}

void LUT_Adj(const IplImage* src,IplImage* dst, uchar table[])
{
	dptr[x] = table[sptr[x]];      
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值