调整图像的对比度和亮度(通过线性方法)

一提到线性方法我们第一时间应该会联想到:二元一次方程
这里openCV介绍的一个函数方法就是利用二元一次方程线性修改图像中的像素值
这种算子能够调整图片亮度和对比度,当然也可以分区域的设置,这个后面用到再说,直接看源码的实现:
  1. void convertToImage(Mat& mat,Mat outputMat,double alpha,int beta){
  2. //遍历这个mat
  3. for(int i = 0 ; i < mat.rows;i++){
  4. for(int j = 0 ; j < mat.cols; j++){
  5. for(int c = 0; c < 3; c++){
  6. outputMat.at<Vec3b>(i,j)[c] = saturate_cast<uchar>(alpha*(mat.at<Vec3b>(i,j)[c])+beta);
  7. }
  8. }
  9. }
  10. }

源码很简单,openCV提供给我们的实现函数式Mat.convertTo(OutputArray m , int rtype, double alpha = 1, double beta = 0);

参数说明下:

outputArray就是输出的目标Mat

rtype是深度,和之前用到的filter2D函数一样,-1代表使用跟源一样的depth,或者填写image.depth()

alpha就是α

beta就是β

(后面还会介绍γ方法)

使用方法:

  1. //先创建一个outputmat
  2. Mat outputMat = Mat::zeros(oriMat.size(), oriMat.type());
  3. oriMat.convertTo(outputMat, -1, 2.2,50);

实现效果跟上面的原始函数一样

效果如下:

接下来还没有结束,官网又提到了γ方法来修改图像的光强和对比度,效果更好!
首先看一看gamma 方式修改图像的公式
O=(I255)γ×255
很明显,它已经不是线性的,那它的好处是什么?
当γ<1 的时候,它能让暗黑区域更加明亮,更加适合处理未曝光完全的图片
它的效果如下:
这是官网上的图片,当然我本地也尝试过,它的代码如下:
因为它是根据像素的值转化的公式,我们要用LUT函数通过查找表的方式修改图像数据
  1. /**
  2. 通过伽马的方式 (非线性) 显示一个图片
  3. */
  4. void gammaProcessImage(Mat& oriMat,double gamma,Mat outputMat){
  5. //伽马方法也是按照一个公式修改了每个像素值,我们可以通过LUT函数进行编写,它的公式是:
  6. //O=(I/255)的γ次方×255
  7. //代码如下
  8. Mat lookupTable(1,256,CV_8U);
  9. uchar* p = lookupTable.ptr();
  10. for (int i =0 ; i < 256; i++) {
  11. p[i] = saturate_cast<uchar>(pow(i/255.0, gamma) * 255.0);
  12. }
  13. LUT(oriMat,lookupTable,outputMat);
  14. }

线性和非线性修改图片亮度和对比度的方式我们这边都熟悉过了,后面继续学习基本绘图部分。

下一篇内容:openCV中傅里叶变换:
http://blog.csdn.net/jbl20078/article/details/78872516

改变图像的对比度和亮度相关推荐

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

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

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

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

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

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

  4. OpenCV学习笔记之改变图像的对比度和亮度

    一.图像对比度和亮度 图像对比度指的是一幅图像中明暗区域最亮的白和最暗的黑之间不同亮度层级的测量,即指一幅图像灰度反差的大小.差异范围越大代表对比越大,差异范围越小代表对比越小,好的对比率120:1就 ...

  5. OpenCV 【十四】改变图像的对比度和亮度高度关联章节:OpenCV 【十】——Gamma校正 ——图像灰度变化

    目录 0 提问 1.1 原理 trick: 1.2 代码 1.3 结果 0 提问 访问像素值 用0初始化矩阵 saturate_cast 是做什么用的,以及它为什么有用 1.1 原理 图像处理 一般来 ...

  6. Chapter_06 更改图像的对比度和亮度

    文章目录 一. 本章目标 ① 目标 ② 理论 ③ 代码 二. 实例 ① 亮度和对比度调整 ② 伽马校正 ③ 纠正曝光不足的图像 三. 图形渲染中的伽马校正(附加资源) 一. 本章目标 ① 目标 本教程 ...

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

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

  8. OpenCV-调整图像的对比度、亮度

    OpenCV-调整图像的对比度.亮度 author@jason_ql http://blog.csdn.net/lql0716 1.图像的对比度.亮度调整原理 f(x):原图像的像素 g(x):输出图 ...

  9. 图像的对比度、亮度、色彩饱和度调节以及灰度化

    对比度的调节: 将图像转化到HSV格式下,先选出所有亮度的中值.当要增加对比度的时候,则降低亮度值比中值小的值,增加亮度值比中值更大的值:当要减少对比度的时候,则增加亮度值比中值小的值,降低亮度值比中 ...

最新文章

  1. php取后三字符串,php字符串截取问题
  2. 图解Sqlite教程2
  3. python使用curses库获取控制台的键盘输入(如上下左右)
  4. mysql循环load data_TP5框架下MySQL通过LOAD DATA INFILE批量导入数据详细操作
  5. mysql字符乱码百度_如何解决MySQL字符集乱码问题
  6. C语言中利用switch语句和 if--else 语句输出,,闰年或平年,及每月对应的天数。
  7. Java Stream API进阶篇
  8. 学习Python的好去处,微信公众号“Python小屋”
  9. LeetCode383. Ransom Note
  10. Python 异常(Exception)
  11. 安卓recovery流程分析【第一篇】
  12. SWUST OJ Coin Changing
  13. go语言中文乱码gbk转UTF8
  14. Racket 8.3下载安装(Win10)
  15. IP Fragment攻击原理
  16. 十一条Python学习路线,推荐收藏
  17. python数据结构二叉树的查找算法_在路上---学习篇(一)Python 数据结构和算法 (5)二分查找、二叉树遍历...
  18. 解决TypeError: Unicode-objects must be encoded before hashing
  19. CookGAN Causality based Text-to-Image Synthesis
  20. 霍尔开关的分类及如何选型

热门文章

  1. linux阻止程序,Linux:阻止某些应用程序/主机名的IPv6
  2. python pathos_python运行多线程库pathos时,pymongo递归深度溢出
  3. 单片机和微型计算机异同,微机与单片机有什么主要的区别?
  4. linux无网络环境pcre安装,Linux下无网络安装Nginx
  5. linux系统snmpd服务内存偏高,Red Hat Enterprise Linux 5.4 64位系统SNMP内存泄漏(上)
  6. 使用“swap技巧”除去多余的容量
  7. 转载:AD的授权还原和主还原:深入浅出Active Directory系列(六)
  8. 开源GIS(十七)——OGC标准
  9. ArcGIS制图技巧系列(1)还原真实的植被
  10. Adobe AIR教程:面向iOS设备的原生扩展