1 对比度与亮度概念

亮度调整:图像像素强度整体变高/变低。

对比度调整:图像暗处像素强度变低,图像亮处像素强度变高,从而拉大中间某个区域范围的显示精度。

通过设计一个映射曲线就可完成对比度、亮度调整,具体过程如上图所示,(a)为原图;(b)把亮度调高,像素强度+固定值;(c)把亮度调低,像素强度-固定值;(d)增大像素强度75附近的对比度;(e)增大像素强度150附近的对比度;(f)增大像素强度75和225附近的对比度。

曲线斜率大于45度角的区域灰度拉伸、精度上升、对比度变高;小于45度角的区域灰度被压缩、精度下降、对比度变低。

2 Opencv关于对比度和亮度的示例

目前,网络上大部分使用opencv调整图像对比度和亮度的文章,基本都是源于官网的示例

映射曲线公式为g(x) = a*f(x)+b

公式实际上是没错的,除了上述(f)图外,其他映射曲线都能构造出来。但大部分人却错误地认为a是控制对比度,b是控制亮度的。

对比度:需要通过a 、b 一起控制(仅调整a只能控制像素强度0附近的对比度,而这种做法只会导致像素强度大于0的部分更亮而已,根本看不到对比度提高的效果)

亮度:通过b控制

3 正确的对比度调整

降低对比度: a = 0.6

调整中心:灰度125(即映射曲线经过(125,125)这个点)

可以计算出b = 125*(1-0.6)。 注意这里的b与亮度没有任何关系,仅仅用于对比度调整

效果图如下

提高对比度: a = 1.68

调整中心:灰度125(即映射曲线经过(125,125)这个点)

可以计算出b = 125*(1-1.68)。 注意这里的b与亮度没有任何关系,仅仅用于对比度调整

效果图如下

4 实现代码

得到a、b值后,直接用convertTo即可。其中s_mean[0]即代表(125,125)调整中心,可以根据需要自行更改。src、src2为输入图像。
void ApplyContrast()
{Mat dst;Mat dst2;if(slider_a < 25){a = (double)slider_a/25;//(0~24)/25}else{a = (double)slider_a/25;// (25~50)/5}//get bb = (1-a)*s_mean[0];//change contrastsrc.convertTo(dst,src.type(),a,b);imshow(WIN_NAME_DST,dst);src2.convertTo(dst2,src2.type(),a,b);imshow(WIN_NAME_DST2,dst2);
}

5 与直方图均衡化的关系

通过这种单一直线能完成简单的固定的对比度调整。但最好的方式是根据目标物体设计映射曲线,提高目标区域的映射曲线斜率,可参考下图做法

(a)图是直方图,也可以看成根据bin值自动设定的对比度,像素个数多的bin对比度设定高;(b)图是人为设定的对比度;(c)图中manual映射曲线是(b)图积分、归一化得到的,(c)图中from histogram是(a)图积分、归一化得到。

(b)图中225-250区域之所以设定高对比度,是为了提高grill这个目标物体成像效果。与直方图均衡化有所区别,因为后者不会去关心grill,它只保证图像entropy最大化。

直方图均衡化的缺点:不会区分目标物体,只会按灰度像素分布设计对比度。比如上述图像中,human body和grill才是我们关注的目标,但直方图均衡化后这两个区域的对比度被设置为非常低的值(human body和grill像素区域小,对应的bin值非常低),导致前景对比度差,效果没有手动设定对比度好。




opencv关于对比度和亮度的误解相关推荐

  1. 独家|OpenCV 1.6 改变图像的对比度和亮度!

    翻译:陈之炎 校对:吴金迪本文约2500字,建议阅读5分钟本文为大家介绍了OpenCV改变图像的对比度和亮度. 目标 在本教程中, 你将学习到以下内容: 访问像素值; 用零初始化矩阵; 学习CV :: ...

  2. 基于OpenCV调整图像的对比度和亮度

    亮度和对比度的调整原理 公式原理: new_image = a*image + beta 即 g(x)=αf(x)+β 其中,α>0 , β 通常被称为 gain 或者 bias 参数,通常这两 ...

  3. OpenCV学习:改变图像的对比度和亮度

    本实例演示简单地改变图像的对比度和亮度,使用了如下线性变换来实现像素值的遍历操作: The parameters α > 0 and β often called the gain and bi ...

  4. 转载:【opencv入门教程之六】创建Trackbar图片对比度、亮度值调整

    [OpenCV入门教程之六] 创建Trackbar & 图像对比度.亮度值调整 浅墨_毛星云 2014-03-18 21:43:18 103746 收藏 21 最后发布:2014-03-18 ...

  5. OpenCV改变图像的对比度和亮度

    OpenCV改变图像的对比度和亮度 改变图像的对比度和亮度 目标 理论 图像处理 像素变换 亮度和对比度调整 代码 解释 结果 改变图像的对比度和亮度 目标 在本教程中,您将学习如何: 访问像素值 用 ...

  6. opencv计算图像亮度调节_OpenCV教程创建Trackbar图像对比度、亮度值调整

    这篇文章中我们一起学习了如何在OpenCV中用createTrackbar函数创建和使用轨迹条,以及图像对比度.亮度值的动态调整. 文章首先详细讲解了OpenCV2.0中的新版创建轨迹条的函数crea ...

  7. OpenCV掩码、blending、改变对比度和亮度、随机发生器和绘图

    掩码 一般来说是对某个像素邻域内的几个像素进行相应的操作实现对图像的滤波等操作. 0 -1 0 -1 5 -1 0 -1 0 例如上面的这个掩码核,使用它来对整副图像进行操作.具体代码如下: cons ...

  8. 【图像处理】OpenCV系列五 --- 图像对比度、亮度值调整

    今天呢,我们一起学习一下,如何调整图像的对比度以及亮度. 一.原理 调整图像亮度与对比度所用的公式 g(i,j) = a * f(i,j) + b 其中,i 和 j 表示像素位于第i行 和 第j列 . ...

  9. OpenCV C++ 图像对比度和亮度

    目录 知识点 亮度和对比度调整原理 示例代码 reference 知识点 在本文中将了解到以下几个方面的内容: 1.C++ OpenCV访问像素值:2.用0初始化矩阵:3.saturate_cast起 ...

最新文章

  1. scrapyd部署爬虫项目到LINUX服务器
  2. 南京大学计算机学院袁健,袁健(南京大学大气科学学院教授)_百度百科
  3. 程序世界的秘密(上)
  4. layer output 激活函数_深入理解YOLO v3实现细节 - 第3篇 构建v3的Loss_layer
  5. uva 12100 Printer Queue 优先级队列模拟题 数组模拟队列
  6. 实施工程师或技术支持应该熟悉的技能
  7. 用matlab求解工作时间调度问题,置换流水车间调度问题的MATLAB求解.doc
  8. switch(封装)
  9. 网络学习笔记(一):TCP连接的建立与关闭
  10. 剖析 Chrome 的小恐龙游戏
  11. IE浏览器无法查看源文件的8大原因
  12. JavaScript大师Nicholas C. Zakas又一大作出中文版了
  13. 物联网(IoT)行业的决策管理应用
  14. 认识 ESP-IDF-v4.3+工程结构(ESP32-C3应用调整示例)
  15. postman使用自定义函数
  16. jquery的$().each(function(i){})和和$.each(,function(i,n){})的区别和用法
  17. vs2017打开项目后项目是空的
  18. 2010最新会计科目表
  19. c语言中用什么表示真假,C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?...
  20. 新能源汽车档位控制器软件功能定义及其策略

热门文章

  1. java类到proto定义转换工具
  2. crypto之曼彻斯特编码
  3. 字体下载大宝库:12款好看的免费英文字体
  4. 基于NRF51822实现触摸按键方案
  5. Android加速度传感器原理,一种Android加速度传感器应用的通用解决方案
  6. 信息管理与信息系统专业实习报告第一天
  7. alway in my heart
  8. Linux 看懂top命令
  9. 【windows命令】--cmd常用命令
  10. 蓝牙耳机什么牌子好?适合学生党入手的耳机品牌