当前位置: 首页 > article >正文

图像处理之图像亮度/对比度调整

目录

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

        灰度均值计算:

Average = \sum_{i=0,j=0}^{M,N}Gray(i,j)

(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


http://www.kler.cn/a/543052.html

相关文章:

  • 栈的简单介绍
  • U3D游戏开发之自制文本工具类
  • CSS 属性选择器详解与实战示例
  • 搜维尔科技在动作捕捉与动画制作、汽车制造与安全测试、机器人与自动化领域的一些案例
  • (一)Axure制作移动端登录页面
  • 语义分割文献阅读——SETR:使用Transformer从序列到序列的角度重新思考语义分割
  • 【AI知识点】Adversarial Validation(对抗验证)
  • Redis核心技术知识点全集
  • 从工匠故事读懂开源软件的特点与价值
  • 物理引擎Box2D
  • 《图解设计模式》笔记(八)管理状态
  • 异位妊娠唯一相关的是年龄(U型曲线)
  • SWIFT (Scalable lightWeight Infrastructure for Fine-Tuning)
  • 【多模态大模型】系列2:Transformer Encoder-Decoder——BLIP、CoCa、BEITv3
  • 【MATLAB源码-第261期】基于matlab的帝企鹅优化算法(EPO)机器人栅格路径规划,输出做短路径图和适应度曲线
  • 浏览器渲染方式及性能优化
  • 使用 meshgrid函数绘制网格点坐标的原理与代码实现
  • SAP-ABAP:dialog界面中的数据块Event Block详解举例
  • Kafka 集群原来是使用ZK管理,现在新版本是怎么管理的?
  • IPC 共享通俗讲解及其安全风险
  • 【devops】 Git仓库如何fork一个私有仓库到自己的私有仓库 | git fork 私有仓库
  • 【电路笔记】-同步计数器
  • 学习星开源在线考试教育系统
  • FFmpeg Audio options
  • Hello Robot具身智能移动操作机器人Stretch 3:开源、灵巧、友好
  • Java 大视界 -- 区块链赋能 Java 大数据:数据可信与价值流转(84)