对比度调整的原理参考这篇博客

以下是代码实现:

#include <iostream>
#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp" using namespace std;
using namespace cv; #define CLIP_RANGE(value, min, max) ( (value) > (max) ? (max) : (((value) < (min)) ? (min) : (value)) )
#define COLOR_RANGE(value) CLIP_RANGE(value, 0, 255)
#define PI 3.1415926 /*
* Adjust Brightness and Contrast
* @param src [in] InputArray
* @param dst [out] OutputArray
* @param brightness [in] integer, value range [-255, 255]
* @param contrast [in] integer, value range [-255, 255]
* @return 0 if success, else return error code
*/
int adjustBrightnessContrast(Mat src, Mat& dst, int brightness, int contrast)
{
if (src.empty()) {
return -1;
} brightness = CLIP_RANGE(brightness, -255, 255);
contrast = CLIP_RANGE(contrast, -255, 255); /*
Algorithm of Brightness Contrast transformation
The formula is:
y = [x - 127.5 * (1 - B)] * k + 127.5 * (1 + B);
x is the input pixel value;
y is the output pixel value;
B is brightness, value range is [-1,1];
k is used to adjust contrast;
k = tan( (45 + 44 * c) / 180 * PI );
c is contrast, value range is [-1,1];
especially:
when B = 0, y = (x-127.5)*k + 127.5, adjust Contrast only;
when c = 0, k = 1, y = x + 255*B, adjust Brightness only;
*/ double B = brightness / 255.;
double c = contrast / 255.;
double k = tan((45 + 44 * c) / 180 * PI); Mat lookupTable(1, 256, CV_8U);
uchar *p = lookupTable.data;
for (int i = 0; i < 256; i++)
p[i] = COLOR_RANGE((i - 127.5 * (1 - B)) * k + 127.5 * (1 + B)); LUT(src, lookupTable, dst); return 0;
} //=====主程序开始====
static Mat src;
static int brightness = 255;
static int contrast = 255; static void callbackAdjust(int, void *)
{
Mat dst;
adjustBrightnessContrast(src, dst, brightness - 255, contrast - 255);
imshow("photo", dst);
} int main()
{
src = imread("D:\\1.jpg"); if (!src.data) {
cout << "error read image" << endl;
return -1;
} namedWindow("photo");
createTrackbar("brightness", "photo", &brightness, 2 * brightness, callbackAdjust);
createTrackbar("contrast", "photo", &contrast, 2 * contrast, callbackAdjust);
callbackAdjust(0, 0); waitKey();
destroyAllWindows(); return 0;
}

[OpenCV] 图像亮度和对比度调整的更多相关文章

  1. 跟我一起学opencv 第五课之调整图像亮度和对比度

    一.调整图像亮度与对比度 1.图像变换 ---像素变换-点操作 ---邻域操作-区域操作 调整图像亮度和对比度属于像素变换-点操作 公式为:g(i,j) = αf(i,j) + β 其中α>0 ...

  2. 【opencv学习笔记七】访问图像中的像素与图像亮度对比度调整

    今天我们来看一下如何访问图像的像素,以及如何改变图像的亮度与对比度. 在之前我们先来看一下图像矩阵数据的排列方式.我们以一个简单的矩阵来说明: 对单通道图像排列如下: 对于双通道图像排列如下: 那么对 ...

  3. openCV - 5~7 图像混合、调整图像亮度与对比度、绘制形状与文字

    5. 图像混合 理论-线性混合操作.相关API(addWeighted) 理论-线性混合操作 用到的公式 (其中 α 的取值范围为0~1之间) 相关API(addWeighted) 参数1:输入图像M ...

  4. opencv::调整图像亮度与对比度

    图像变换可以看作如下: - 像素变换 – 点操作 - 邻域操作 – 区域 调整图像亮度和对比度属于像素变换-点操作 //创建一张跟原图像大小和类型一致的空白图像.像素值初始化为0 Mat new_im ...

  5. GPUImage中对比度调整的实现——GPUImageContrastFilter

    对比度指的是一幅图像中明暗区域最亮的白和最暗的黑之间不同亮度层级的测量,差异范围越大代表对比越大,图像越鲜亮,差异范围越小代表对比越小,图像越灰. GPUImage中实现了对比度调整的Filter,其 ...

  6. 图像对比度调整的simulink仿真总结

    图像对比度调整可以由一个模块contrast adjustment 完成,参数有输入范围和输出范围,计算过程由以下公式决定 解释一下,当input<=low_in的时候输出的值是low_out+ ...

  7. Python: PS 图像调整--对比度调整

    本文用 Python 实现 PS 里的图像调整–对比度调整.具体的算法原理如下: (1).nRGB = RGB + (RGB - Threshold) * Contrast / 255 公式中,nRG ...

  8. Python: scikit-image gamma and log 对比度调整

    这个函数,主要用来做对比度调整,利用 gamma 曲线 或者 log 函数曲线, gamma 函数的表达式: y=xγ, 其中, x 是输入的像素值,取值范围为 [0−1], y 是输出的像素值,通过 ...

  9. Win8Metro(C#)数字图像处理--2.6图像对比度调整

    原文:Win8Metro(C#)数字图像处理--2.6图像对比度调整  2.6图像对比度调整函数 [函数名称] 图像对比度调整函数ContrastAdjustProcess(WriteableBi ...

随机推荐

  1. 003转载----C#打开网页

    作者:微wx笑 来源:CSDN 原文:https://blog.csdn.net/testcs_dn/article/details/42246969 版权声明:本文为博主原创文章,转载请附上博文链接 ...

  2. 006_FreeRTOS其他API函数

    (一)FreeRTOS其他API函数是在调试中使用的,具体使用的看书本,贴出来为了方便查找 (二)FreeRTOS其他API函数 (三)常用 1. uxTaskGetSystemState() 获取信 ...

  3. 001_C#我的第一个串口上位机软件

    (一)首先感谢杜洋工作室 < 入门 C#设计 >带来的视频教学 (二)本次设计从会单片机但是又不会上位机又想搞简单上位机的人群角度提供教程 (三)本次教程的目的是制作普通的串口软件,从而实 ...

  4. 安裝PHPBB

    1.下載PHPBB https://www.phpbb.com/downloads/ 2下載PHP http://windows.php.net/download/ 很多教程都介紹在WIN7用ISAP ...

  5. CF 940F - Machine Learning ( 带 修 )

    题目: 链接:https://codeforces.com/problemset/problem/940/F 题意:给你n个数,a[i]有q个操作,操作有两种:操作1.       1 x y 表示询 ...

  6. Spring Boot 如何部署到 Linux 中的服务

    打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档. 文档链接如下: https://docs. ...

  7. getFieldDecorator用法(二)——封装表单模块

    后台管理系统经常用到表单查询,因此做了个封装 myorder.js import React from 'react'; import { Card, Button, Table, Form, Sel ...

  8. Apache Flink - 基本API概念

    Flink程序是实现分布式集合转换的常规程序.集合最初是从源创建的.通过接收器(slink)返回结果,接收器可以将数据写到某个文件或stdout.Flink可以在各种环境(context)中运行,本地 ...

  9. Linux设备驱动 之 中断处理程序

    注册中断处理程序 中断处理程序是管理硬件驱动程序的组成部分:如果设备使用中断,那么相应的驱动程序就注册一个中断处理程序: 驱动程序通过request_irq()函数注册,并且激活给定的中断线,以处理中 ...

  10. 如何丧心病狂的使用python爬虫读小说

    写在前边 其实一直想入门python很久了,慕课网啊,菜鸟教程啊python的基础的知识被我翻了很多遍了,但是一直没有什么实践.刚好,这两天被别人一直安利一本小说<我可能修的是假仙>,还在 ...