图像处理之图像亮度/对比度调整
目录
1 图像亮度/对比度调整简介
2 图像亮度/对比度调整公式
3 图像亮度/对比对调整代码实现
4 演示Demo
4.1 开发环境
4.2 功能介绍
4.3 下载地址
参考
1 图像亮度/对比度调整简介
图像亮度是图像给人眼的一种直观感受。对于一张灰度图而言,灰度值越大,图像就越亮;反之,图像越暗。
图像对比度是指图像中从黑色到白色渐变的层次反差或比值。反差越大,比值越大,从视觉上感知,图像就越清晰醒目,对比度越大;反差越小,比值越小,从视觉上感知,图像越不清晰醒目,蒙尘感越强,对比度越小。
2 图像亮度/对比度调整公式
关于亮度和对比度调整的算法有很多,由于PS的特殊性和通用性,这里只介绍PS中的亮度/对比度调整算法。
(1)在RGB颜色空间中,计算宽x高为 MxN 的图像灰度平均值 Average
灰度化公式: Gray = 0.299R + 0.587G + 0.114B
灰度均值计算:
(2)亮度/对比度调整公式
3 图像亮度/对比对调整代码实现
/*************************************************
功 能:图像亮度与对比度调整
参 数:srcData - [输入/输出] 原始图像,格式为32位BGRA格式,执行后修为结果图像
width - [输入] 原始图像宽度
height - [输入] 原始图像高度
stride - [输入] 原始图像的Stride(也就是行字节数width*4)
bright - [输入] 亮度改变量(-100~100)
contrast - [输入] 对比度改变量(-100~100)
返 回: 0-成功,其他-失败.
*************************************************/
int brightContrast(unsigned char *srcData, int width, int height, int stride, int bright, int contrast)
{
int ret = 0;
bright = CLIP3(bright, -100, 100);
contrast = CLIP3(contrast, -100, 100);
//compute average light of image
int Average = 0;
int offset = stride - width * 4;
unsigned char* pSrc = srcData;
for (int j = 0; j < height; j++)
{
for (int i = 0; i < width; i++)
{
Average += (299 * pSrc[2] + 587 * pSrc[1] + 114 * pSrc[0]) / 1000;
pSrc += 4;
}
pSrc += offset;
}
Average = Average / (width * height);
pSrc = srcData;
unsigned char BC_MAP[256];
int temp = 0;
for (int i = 0; i < 256; i++)
{
int temp = contrast > 0 ? CLIP3(i + bright, 0, 255) : i;
if (contrast > 0)
{
temp = CLIP3(i + bright, 0, 255);
temp = CLIP3(Average + (temp - Average) * (1.0f / (1.0f - contrast / 100.0f)), 0, 255);
}
else
{
temp = i;
temp = CLIP3(Average + (temp - Average) * (1.0f + contrast / 100.0f), 0, 255);
temp = CLIP3(temp + bright, 0, 255);
}
BC_MAP[i] = temp;
}
for (int j = 0; j < height; j++)
{
for (int i = 0; i < width; i++)
{
pSrc[0] = BC_MAP[pSrc[0]];
pSrc[1] = BC_MAP[pSrc[1]];
pSrc[2] = BC_MAP[pSrc[2]];
pSrc += 4;
}
pSrc += offset;
}
return ret;
};
4 演示Demo
4.1 开发环境
-
Windows 10 Pro x64
-
Visual Studio 2015
4.2 功能介绍
演示程序主界面如下图所示,具有图像读取、显示、保存、显示RGBA值、HSV调整、提取YUV分量、灰度化、二值化、直方图、亮度/对比度调整等功能。
原图
效果图(亮度:50,对比度:20)
4.3 下载地址
开发环境:
-
Windows 10 pro x64
-
Visual Studio 2015
下载地址:图像处理之图像亮度/对比度调整Demo
参考
图像视频滤镜与人像美颜美妆算法详解. 胡耀武、谭娟、李云夕. 电子工业出版社、2020-07