[code]自动白平衡white blance

//2013.10.24 
//eageldiao
//自动白平衡

   CvScalar rgb;
   rgb=cvAvg(src);

#ifdef COLOR_GW       //灰度世界假设(R,= R*K/Ravg ,其中,K=128 or (Ravg+Gavg+Bavg)/3 )
int KK,gw_k;
//KK=rgb.val[0];
//if (rgb.val[1]>KK)KK=rgb.val[1];
//if (rgb.val[2]>KK)KK=rgb.val[2];
//gw_k=KK;                          //K=max(Ravg+Gavg+Bavg)
     
//gw_k=(rgb.val[0]+rgb.val[1]+rgb.val[2])/3;//K=mean(Ravg+Gavg+Bavg)
gw_k=120;                       //K=128;    
printf( "K=%d;BGR(%f,%f,%f)\n",gw_k,rgb.val[0],rgb.val[1],rgb.val[2]);      //显示RGB三通道的均值。

#endif

#ifdef COLOR_REMAIN
float gw_k, rgbavg, KK;
//rgbavg=(rgb.val[0]+rgb.val[1]+rgb.val[2])/3;
//KK=rgb.val[0]/rgbavg;
//if(rgb.val[1]/rgbavg>KK)KK=rgb.val[1]/rgbavg;
//if(rgb.val[2]/rgbavg>KK)KK=rgb.val[2]/rgbavg;
//gw_k=KK;            
gw_k=1.3;
printf( "K=%f(%f,%f,%f)\n",gw_k,rgb.val[0],rgb.val[1],rgb.val[2]);      //显示RGB三通道的均值。

#endif


for(y=0;y<height;y++)
{
unsigned char *srcrow= (unsignedchar*)(src->imageData+y*src->widthStep);
for (x=0;x<width;x++)
{  
#ifdef COLOR_GW                            //使用一般的灰度世界的方法
srcrow[3*x]=srcrow[3*x]*gw_k/rgb.val[0]>255 ? 255:srcrow[3*x]*gw_k/rgb.val[0];
srcrow[3*x+1]=srcrow[3*x+1]*gw_k/rgb.val[1]>255 ?255: srcrow[3*x+1]*gw_k/rgb.val[1];
srcrow[3*x+2]=srcrow[3*x+2]*gw_k/rgb.val[2]>255 ?255: srcrow[3*x+2]*gw_k/rgb.val[2];
#endif

#ifdef COLOR_REMAIN                         //使用颜色保持的增强方法,R'/R=G'/G=B'/B=gw_k;
srcrow[3*x]=srcrow[3*x]*gw_k>255 ?255: srcrow[3*x]*gw_k;
srcrow[3*x+1]=srcrow[3*x+1]*gw_k>255 ?255: srcrow[3*x+1]*gw_k;
srcrow[3*x+2]=srcrow[3*x+2]*gw_k>255 ?255: srcrow[3*x+2]*gw_k;
#endif
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值