PhotoShop算法实现--色调/饱和度调整(四)
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 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 欢迎转载或分享,但请务必声明文章出处。