OpenCV之图像对比度与亮度调整(C++实现)
图像对比度和亮度的调整,属于图像处理中的点操作,其有一个特点:仅仅根据输入像素的值,来计算相应的输出像素值。这列蒜子包括亮度和对比度调整、颜色校正和变换。
最常用的点操作是乘以一个常数,再加上一个常数,公式如下:
其中:
- 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++实现)相关推荐
- OpenCV学习笔记(三):图像对比度、亮度调整源码
OpenCV学习笔记(三):图像对比度.亮度调整源码 主函数: #include <opencv2/opencv.hpp>using namespace cv;using namespac ...
- OpenCV C++ 图像对比度和亮度
目录 知识点 亮度和对比度调整原理 示例代码 reference 知识点 在本文中将了解到以下几个方面的内容: 1.C++ OpenCV访问像素值:2.用0初始化矩阵:3.saturate_cast起 ...
- Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization)
Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization) ############ ...
- OpenCV3之——图像对比度,亮度调整
首先了解一下算子的概念,一般的图像处理算子都是一个函数,它接受一个或多个输入图像,并产生输出图像.下面是算子的一般形式: g(x) = h( f(x) ) 或者 g(x) = h( f0(x)·· ...
- c++ opencv实现图像对比度增强
#include<iostream> #include<opencv2/opencv.hpp> #include<math.h>using namespace cv ...
- OpenCV之图像对比度、亮度值调整
先上代码 #include <iostream> #include <opencv2/core.hpp> #include <opencv2/highgui.hpp> ...
- 图像 对比度、亮度调整
#include "stdafx.h"#include <opencv2\highgui\highgui.hpp> #include <opencv2\core\ ...
- 【OpenCV学习笔记】之图像混合、叠加和对比度、亮度调整
一.图像混合.叠加 图像线性混合的数学原理 :G(x)=(1-a)F(x)+aQ(x) 注意事项: 1,a的取值范围为0到1之间 2,F(x)和Q(x)为参与混合的两幅图像,G(x)表示输出图像 3 ...
- 【图像处理】OpenCV系列五 --- 图像对比度、亮度值调整
今天呢,我们一起学习一下,如何调整图像的对比度以及亮度. 一.原理 调整图像亮度与对比度所用的公式 g(i,j) = a * f(i,j) + b 其中,i 和 j 表示像素位于第i行 和 第j列 . ...
最新文章
- 【转载】“error LNK1169: 找到一个或多个多重定义的符号”的解决方法
- 每日一皮:终于明白女朋友挂在嘴边的“鸽子蛋”为什么那么贵了...
- python标准模块--os
- 本周的比特币现金市场和商家支持
- mysql 重试_重试MySQL/SQLAlchemy的死锁
- 【OpenJudge - noi - 7624】山区建小学(dp)
- 学习php开发步骤,学习php设计模式 php实现模板方法模式
- python字节码执行函数_做一个字节码追踪器,从内部理解 Python 的执行过程
- python面试必考知识点_python编程面试中必考的知识点,数据类型全解,笔记超全面...
- 邱锡鹏《神经网络与深度学习》—— 部分习题答案整理
- UE4内容浏览器改文件夹名称后无法删除空文件夹
- ACM在线测试题C++实现蛇形填数
- POJ 1273 Dinic
- Unity UI拉伸缩放适配屏幕尺寸
- linux speedtest-cli测速报错
- MNS支持JMS协议的方案
- 网上图书订阅系统之(招标书,投标书)
- linux操作系统面试题及答案
- matlab彩色图像边缘检测,canny算法实现彩色图像边缘检测
- 别人家的工资!在BAT做三年 普通员工能拿多少?