图像对比度和亮度的调整,属于图像处理中的点操作,其有一个特点:仅仅根据输入像素的值,来计算相应的输出像素值。这列蒜子包括亮度和对比度调整、颜色校正和变换

最常用的点操作是乘以一个常数,再加上一个常数,公式如下:

其中:

  • f(x)表示源像素
  • g(x)表示输出像素
  • a被称为增益,需满足a>0,常常被用来控制图像的对比度
  • b是偏置,被用来控制图像的亮度。

代码实现如下:

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;static void on_ContrastAndBright(int, void *);int g_nContrastValue;
int g_nBrightValue;Mat srcImage, dstImage;int main() {
//    读入图像srcImage = imread("//Users//dwz//Desktop//cpp//1.jpg");
//    dstImage = Mat::zeros(srcImage.size(), srcImage.type());dstImage = srcImage.clone();//    设定对比度和亮度的初值g_nContrastValue = 80;g_nBrightValue = 80;//    创建效果图的窗口namedWindow("xgt");//    创建轨迹条createTrackbar("contrast", "xgt", &g_nContrastValue, 300, on_ContrastAndBright);createTrackbar("bright", "xgt", &g_nBrightValue, 200, on_ContrastAndBright);//    进行回调函数初始化on_ContrastAndBright(g_nContrastValue, 0);on_ContrastAndBright(g_nBrightValue, 0);//    按下q键时程序退出while (char(waitKey(1)) != 'q') {}return 0;
}static void on_ContrastAndBright(int, void *){
//    这一块是调整对比度和亮度的主要代码namedWindow("ori", 1);int rowNum = srcImage.rows;int colNUm = srcImage.cols * srcImage.channels();for (int i=0;i<rowNum;i++){uchar* data = dstImage.ptr<uchar>(i);for (int j = 0; j < colNUm; j++) {data[j] = saturate_cast<uchar>(g_nContrastValue * 0.01 * data[j] + g_nBrightValue);}}imshow("ori", srcImage);imshow("xgt", dstImage);}

其中的saturate_cast()函数用于溢出保护,大致原理如下:

if (data<0)data = 0;else if (data >255)data = 0;

运行结果如下,通过调节两个轨迹条,可以改变图片的对比度和亮度:

OpenCV之图像对比度与亮度调整(C++实现)相关推荐

  1. OpenCV学习笔记(三):图像对比度、亮度调整源码

    OpenCV学习笔记(三):图像对比度.亮度调整源码 主函数: #include <opencv2/opencv.hpp>using namespace cv;using namespac ...

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

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

  3. Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization)

    Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization) ############ ...

  4. OpenCV3之——图像对比度,亮度调整

    首先了解一下算子的概念,一般的图像处理算子都是一个函数,它接受一个或多个输入图像,并产生输出图像.下面是算子的一般形式: g(x) = h( f(x) )  或者  g(x) = h( f0(x)·· ...

  5. c++ opencv实现图像对比度增强

    #include<iostream> #include<opencv2/opencv.hpp> #include<math.h>using namespace cv ...

  6. OpenCV之图像对比度、亮度值调整

    先上代码 #include <iostream> #include <opencv2/core.hpp> #include <opencv2/highgui.hpp> ...

  7. 图像 对比度、亮度调整

    #include "stdafx.h"#include <opencv2\highgui\highgui.hpp> #include <opencv2\core\ ...

  8. 【OpenCV学习笔记】之图像混合、叠加和对比度、亮度调整

    一.图像混合.叠加 图像线性混合的数学原理  :G(x)=(1-a)F(x)+aQ(x) 注意事项: 1,a的取值范围为0到1之间 2,F(x)和Q(x)为参与混合的两幅图像,G(x)表示输出图像 3 ...

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

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

最新文章

  1. 【转载】“error LNK1169: 找到一个或多个多重定义的符号”的解决方法
  2. 每日一皮:终于明白女朋友挂在嘴边的“鸽子蛋”为什么那么贵了...
  3. python标准模块--os
  4. 本周的比特币现金市场和商家支持
  5. mysql 重试_重试MySQL/SQLAlchemy的死锁
  6. 【OpenJudge - noi - 7624】山区建小学(dp)
  7. 学习php开发步骤,学习php设计模式 php实现模板方法模式
  8. python字节码执行函数_做一个字节码追踪器,从内部理解 Python 的执行过程
  9. python面试必考知识点_python编程面试中必考的知识点,数据类型全解,笔记超全面...
  10. 邱锡鹏《神经网络与深度学习》—— 部分习题答案整理
  11. UE4内容浏览器改文件夹名称后无法删除空文件夹
  12. ACM在线测试题C++实现蛇形填数
  13. POJ 1273 Dinic
  14. Unity UI拉伸缩放适配屏幕尺寸
  15. linux speedtest-cli测速报错
  16. MNS支持JMS协议的方案
  17. 网上图书订阅系统之(招标书,投标书)
  18. linux操作系统面试题及答案
  19. matlab彩色图像边缘检测,canny算法实现彩色图像边缘检测
  20. 别人家的工资!在BAT做三年 普通员工能拿多少?

热门文章

  1. 网吧无盘服务器游戏盘,网吧有盘无盘轻松自由切换
  2. 用友软件修改辅助核算导致总账与辅助账对账不平问题解决方法
  3. 施耐德plc通过modbus转发数据
  4. uni-app 原生标题栏搜索输入框事件合集
  5. girdFS 存储照片,保存照片到硬盘
  6. 数字基带传输系统——数字基带信号
  7. 联系我们-神箭手云爬虫开发平台
  8. boost库之正则匹配
  9. CSS的width:100%和width:auto区别
  10. 【STM32F407】Note_01 STM32 编程环境搭建 -- Keil与VS code组合