第5章 Core组件进阶

5.4 图像对比度、亮度值调整

5.4.1 理论依据

1.算子:一般图像处理算子都是一个函数,接受一个或多个输入图像,并产生输出图像
2.算子一般形式:
3.点操作(point operators):仅根据输入像素值计算输出像素值,这类算子包括亮度(brightness)和对比度(contrast)调整、颜色矫正(color correction)、变换(transformations)
4.两种最常用的点操作是乘上一个常数(对应对比度调节)以及加上一个常数(对应亮度值调节)
(1)公式如下:(具体到像素:
(2)f(x)表示源图像像素,g(x)表示输出图像像素,a控制图像对比度(被称为增益gain),b控制图像亮度(被称为偏置bias)

5.4.2 示例程序

#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>
using namespace cv;
using namespace std;//全局函数声明
static void on_ContrastAndBright(int, void *);
//全局变量声明
int g_nContrastValue;//对比度值
int g_nBrightValue;//亮度值
Mat g_srcImage, g_dstImage;int main()
{//[1]输入图像g_srcImage = imread("love.jpg");if (!g_srcImage.data) { printf("读取图片错误,请确定目录下是否有imread函数指定图片存在~!"); return false; }g_dstImage = Mat::zeros(g_srcImage.size(), g_srcImage.type());//[2]设定对比度和亮度初值g_nContrastValue = 80;g_nBrightValue = 80;//[3]创建效果图窗口namedWindow("[效果图窗口]");//[4]创建轨迹条createTrackbar("对比度:", "[效果图窗口]", &g_nContrastValue, 300, on_ContrastAndBright);createTrackbar("亮  度:", "[效果图窗口]", &g_nBrightValue, 200, on_ContrastAndBright);//[5]进行回调函数初始化on_ContrastAndBright(g_nContrastValue, 0);on_ContrastAndBright(g_nBrightValue, 0);//[6]按下"q"键时,程序退出while(char(waitKey(1))!='q'){ }return 0;
}
//改变图像对比度和亮度值的回调函数
static void on_ContrastAndBright(int, void *)
{//创建窗口namedWindow("[原始图窗口]");//三个for循环,执行运算g_dstImage(i,j)=a*g_srcImage(i,j)+bfor (int x = 0; x < g_srcImage.rows; x++){for (int y = 0; y < g_srcImage.cols; y++){for (int c = 0; c < 3; c++){g_dstImage.at<Vec3b>(x, y)[c] = saturate_cast<uchar>((g_nContrastValue*0.01)*(g_srcImage.at<Vec3b>(x, y)[c]) + g_nBrightValue);//saturate_cast模板函数,用于溢出保护,原理:if(data<0) data=0; else if(data>255) data=255;//a的取值为0.0-3.0的浮点值,但轨迹条一般取整数,将对比度值nContrastValue参数设为0到300,式子中乘以0.01}}}//显示图像imshow("[原始图窗口]", g_srcImage);imshow("[效果图窗口]", g_dstImage);
}

《OpenCV3编程入门》学习笔记5 Core组件进阶(四)图像对比度、亮度值调整相关推荐

  1. Opencv3编程入门学习笔记(三)之访问图像像素的三种方法

    访问图像像素的三种方法:指针访问,迭代器访问,动态地址访问.访问最快的为指针访问,以下算法在几毫秒,但指针访问容易造成内存泄漏:其次为迭代器访问:最后为动态地址访问. 以下程序是根据<OpenC ...

  2. 原创 OpenCV3编程入门 学习笔记(总)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_36163358/article/ ...

  3. OpenCV3编程入门 学习笔记(总)

    OpenCV3编程入门 学习笔记 2018.12.12-2018.12.29 此博客为在看过毛星云版<OpenCV3编程入门>后所总结的一本笔记,可供复习使用. 文章目录 OpenCV3编 ...

  4. Opencv3编程入门学习笔记(五)之通道分离(split)与合并(merge)

    若要对Opencv中(BGR)颜色通道进行单一处理,那必然会涉及到通道分离(split)与合并(merge).那么本篇博客笔者记录了两个方法的使用方法和案例.案例来源于<Opencv3编程入门学 ...

  5. 《OpenCV3编程入门》学习笔记5 Core组件进阶(六)输入输出XML和YAML文件

    第5章 Core组件进阶 5.6 输入输出XML和YAML文件 5.6.1 XML和YAML文件 XML和YAML是使用非常广泛的文件格式,可以利用XML或者YAML式的文件存储和还原各种数据结构,还 ...

  6. 《OpenCV3编程入门》学习笔记5 Core组件进阶(五)离散傅里叶变换(DFT)

    第5章 Core组件进阶 5.5 离散傅里叶变换(Discrete Fourier Transform,DFT) 5.5.1 离散傅里叶变换原理 1.对一张图像使用傅里叶变换就是把它分解成正弦和余弦, ...

  7. 《OpenCV3编程入门》学习笔记5 Core组件进阶(三)分离合并颜色通道

    第5章 Core组件进阶 5.3 分离&合并颜色通道 5.3.1 通道分离:split()函数 1.作用:将一个多通道数组分离成几个单通道数组,公式: 2.原型:(1)void split(c ...

  8. 《OpenCV3编程入门》学习笔记5 Core组件进阶(二) ROI区域图像叠加图像混合

    第5章 Core组件进阶 5.2 ROI区域图像叠加&图像混合 5.2.1 感兴趣区域ROI(region of interest) 1.定义ROI区域两种方法: (1)定义矩形区域Rect: ...

  9. 《OpenCV3编程入门》学习笔记5 Core组件进阶(一)访问图像中的像素

    第5章 Core组件进阶 5.1 访问图像中的像素 5.1.1 图像在内存中的存储方式 1.图像矩阵大小取决于通道数,矩阵中的子列个数与通道数相等. 2.如果内存足够大,可以实现连续存储,有助于提升图 ...

最新文章

  1. 经常用到的JS 表单验证函数
  2. vscode 配置 git (配置、暂存、推送、拉取、免密)
  3. 微型计算机控制技术试卷B,微型计算机控制技术试卷b..doc
  4. 用 RxSwift 实现通用的响应式转场
  5. centos将某一目录权限给用户_centos7如何新建普通权限用户,仅能访问指定目录,使用gcc?...
  6. 你属于开源性格测试六大分类中的哪一类呢
  7. 现在的 C 语言仍值得程序员学习吗?
  8. scratch冬天下雪了 电子学会图形化编程scratch等级考试三级真题和答案解析2022年3月
  9. 利用迅雷提供的接口从磁力链得到bt种子文件
  10. 2020年中国养老地产行业市场现状分析,提高养老地产运营水平是关键「图」
  11. 采样频率和带宽的关系_示波器的采样率及存储深度
  12. python少儿趣味编程多少钱一节_学费昂贵的少儿编程课,为什么被追捧?
  13. 三角函数,反函数去反的数值
  14. 先验分布/后验分布/似然估计/贝叶斯公式
  15. 东北天、地心地固、WGS84转换-代码
  16. mac java api文档_程序员必备 Dash for mac 各种语言和系统Api文档
  17. 六发左轮java_缅怀逝去的塞班 盘点那些经典的JAVA手游
  18. ElasticSearch中Cat接口详解
  19. 大型网站技术架构 读书笔记3 架构师
  20. 专访黑客历史学家George Dyson

热门文章

  1. mysql同事包含_mysql 包含关系处理
  2. etcd 笔记(08)— 基于 etcd 实现分布式锁
  3. 什么是码元计算机通信
  4. LeetCode简单题之找到小镇的法官
  5. 图融合GCN(Graph Convolutional Networks)
  6. CloudHub概述
  7. 科技公司重新关注2级以上驾驶员辅助
  8. 2021年大数据Kafka(五):❤️Kafka的java API编写❤️
  9. Django入门之开发环境搭建1.1
  10. VMware14安装CentOS7的详细教程