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

PhotoShop算法实现--色调/饱和度调整(四)

2014-11-30 15:22 405 查看
PhotoShop算法实现--色调/饱和度调整(四)

kezunhai@gmail.com

http://blog.csdn.net/kezunhai
图像色调/饱和度调节,就是让用户按照自己的感觉对图像的色调、饱和度二行亮度三个分量进行调整,以满足用户的需求。

现原理:将输入的RGB空间的图像转换到HSI颜色空间,根据用户输入的H、S、I三个调整参数,分别加到对应的色彩分量上,从而改变原来图像的色彩

实现代码:

// H:0~180, S:0~255, V:0~255
void PhotoShop:: AdjustHSI(Mat& img, Mat& aImg, int  hue, int saturation, int ilumination)
{
	if ( aImg.empty())	
		aImg.create(img.rows, img.cols, img.type());	

	Mat temp;
	temp.create(img.rows, img.cols, img.type());	

	cvtColor(img, temp, CV_RGB2HSV);	

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

	if (temp.isContinuous())
	{
		size.width *= size.height; 
		size.height = 1;
	}

	// 验证参数范围
	if ( hue<-180 )
		hue = -180;

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

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

	if ( hue>180)
		hue = 180;

	if ( saturation>255)
		saturation = 255;

	if ( ilumination>255)
		ilumination = 255;

	for (  i= 0; i<size.height; ++i)
	{		
		unsigned char* src = (unsigned char*)temp.data+temp.step*i;
		for (  j=0; j<size.width; ++j)
		{
			float val = src[j*chns]+hue;
			if ( val < 0) val = 0.0;
			if ( val > 180 ) val = 180;
			src[j*chns] = val;

			val = src[j*chns+1]+saturation;
			if ( val < 0) val = 0;
			if ( val > 255 ) val = 255;
			src[j*chns+1] = val;
			
			val = src[j*chns+2]+saturation;
			if ( val < 0) val = 0;
			if ( val > 255 ) val = 255;
			src[j*chns+2] = val;						
		}
	}	

	cvtColor(temp, aImg, CV_HSV2RGB);
	if ( temp.empty())
		temp.release();
	
}
实现效果:



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