通常我们想改变彩色图片的亮度,可以先将彩色图片进行灰度化,将灰度图片进行变换,然后将变换后的灰度图与原始的灰度的比例应用到原始的彩色图像中,但是如果彩色图片的亮度过高,放大倍数过大,将导致彩色图片的色彩失真。
有个可以不失真的亮度的转换公式,具体是在哪篇论文中看到的,不大记得了。
分别计算彩色图片三个通道的亮度:
int outValueB=outputGrayValue*pow(inputValueB*1.00/inputGrayValue,0.7);
int outValueG=outputGrayValue*pow(inputValueG*1.00/inputGrayValue,0.7);
int outValueR=outputGrayValue*pow(inputValueR*1.00/inputGrayValue,0.7);
outValueB,outValueG,outValueR 分别对应处理后的彩色图片的三通道的像素值。
inputValueB,inputValueG,inputValueR 分别对应原始的彩色图片的三通道的像素值。
inputGrayValue 为处理前的彩色图片的灰度值。
outputGrayValue 为inputGrayValue 变换后的灰度值。
按以上公式,遍历图片的所有像素点即可得到彩色图像的亮度变换。