您的位置:首页 > 运维架构

PhotoShop算法实现--色彩平衡(偏色校正)(一)

2014-11-30 12:50 816 查看
PhotoShop算法实现--色彩平衡(偏色校正)(一)

kezunhai@gmail.com

http://blog.csdn.net/kezunhai
色彩平衡是图像处理软件中一个重要环节,通过对图像的色彩平衡处理,可以校正图像色偏,过饱和或饱和度不足的情况,也可以根据自己的喜好和***需要,调制需要的色彩,更好的完成画面效果,应用于多种软件和图像、视频***中。

实现原理:根据用户指定的R、G、B三个色彩的调整分量,分别附加到对应的色彩分量上,从而改变原始图像的色彩,以达到用户的需求

实现代码:

// 色彩增强: cR,cG,cB分别是RGB的增量(-255~255)
// cbImg:彩色平衡后的返回图像
void PhotoShop:: ColorBalance(Mat& img, Mat& cbImg, int cR, int cG, int cB)
{
	if ( cbImg.empty())	
		cbImg.create(img.rows, img.cols, img.type());		

	cbImg = cv::Scalar::all(0);

	int i, j;
	Size size = img.size();
	int chns = img.channels();

	if (img.isContinuous() && cbImg.isContinuous())
	{
		size.width *= size.height; 
		size.height = 1;
	}
	
	// 验证参数范围
	if ( cR<-255 )
		cR = -255;

	if ( cG<-255 )
		cG = -255;

	if ( cB<-255 )
		cB = -255;

	if ( cR>255)
		cR = 255;

	if ( cG>255)
		cG = 255;

	if ( cB>255)
		cB = 255;

	for (  i= 0; i<size.height; ++i)
	{
		const unsigned char* src = (const unsigned char*)(img.data+ img.step*i);
		unsigned char* dst = (unsigned char*)cbImg.data+cbImg.step*i;
		for (  j=0; j<size.width; ++j)
		{
			dst[j*chns] = saturate_cast<uchar>(src[j*chns] +cR);
			dst[j*chns+1] = saturate_cast<uchar>(src[j*chns+1] +cG);
			dst[j*chns+2] = saturate_cast<uchar>(src[j*chns+2] +cB);			
		}
	}	
}
效果测试:





另外,关于色彩偏差的检测可以参考:图像偏色检测算法

作者:kezunhai 出处:http://blog.csdn.net/kezunhai 欢迎转载或分享,但请务必声明文章出处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: