一、亮度和对比度
1、图像亮度:
图像亮度就是画面的明亮程度(灰度图像,则跟灰度值有关,灰度值越高则图像越亮),单位是堪德拉每平米(cd/m2)或称nits。
图象亮度是从白色表面到黑色表面的感觉连续体,由反射系数决定,亮度侧重物体,重在“反射”。

例如:灰度图像是单通道的,灰度值在【0,255】之间,越接近‘0’,亮度越暗,越接近‘255’,亮度越亮。

2、图像对比度:
图像对比度就是一幅图像中明暗区域最亮的白和最暗的黑之间不同亮度层级的测量,即指一幅图像灰度反差的大小。

解析:差异范围越大代表对比越大,差异范围越小代表对比越小,好的对比率120:1就可容易地显示生动、丰富的色彩,当对比率高达300:1时,便可支持各阶的颜色。

二、RGB三通道色彩空间的图像变换:
1、线性变换公式如下:
公式解析:
系数α用来调整点的对比度;系数β用来调整点的亮度;

   1)当α=1,β=0时,图像无任何改变;2)当α<1,β=0时,图像对比度下降,图像变暗;3)当α>1,β=0时,图像对比度上升,图像变生动、丰富;4)β上下浮动,图像亮度发生改变,不改变图像对比度;5)α的值>0,因为opencv是针对BGR图像的,没有负的;

三、图像亮度调整:

#include <opencv2/opencv.hpp>
#include <iostream>using namespace std;
using namespace cv;
int main() {Mat src, dst;src = imread("D:\\Myfile\\素材照片\\opencv素材照片\\8.jpg");if (!src.data) {cout << "could not load image..." << endl;return 0;}char input_win[] = "input_image";//用来命名显示窗口的名称namedWindow(input_win, WINDOW_AUTOSIZE);imshow(input_win, src);//用at函数对像素点进行操作,改变亮度int height = src.rows;int width = src.cols;float beta = 30;dst = Mat::zeros(src.size(), src.type());for (int row = 0; row < height; row++) {for (int col = 0; col < width; col++) {if (src.channels() == 3) {float b = src.at<Vec3b>(row, col)[0];float g = src.at<Vec3b>(row, col)[1];float r = src.at<Vec3b>(row, col)[2];dst.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(b + beta);dst.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(g + beta);dst.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(r + beta);}else if (src.channels() == 1) {float v_gray = src.at<uchar>(row, col);dst.at<uchar>(row, col) = saturate_cast<uchar>(v_gray + beta);}}}namedWindow(input_win, WINDOW_AUTOSIZE);imshow("output_image", dst);waitKey(0);return 0;
}



四、图像对比度调整

#include <opencv2/opencv.hpp>
#include <iostream>using namespace std;
using namespace cv;
int main() {Mat src, dst;src = imread("D:\\Myfile\\素材照片\\opencv素材照片\\8.jpg");if (!src.data) {cout << "could not load image..." << endl;return 0;}char input_win[] = "input_image";//用来命名显示窗口的名称namedWindow(input_win, WINDOW_AUTOSIZE);imshow(input_win, src);//用at函数对像素点进行操作,改变对比度int height = src.rows;int width = src.cols;float alpha = 1.5;dst = Mat::zeros(src.size(), src.type());for (int row = 0; row < height; row++) {for (int col = 0; col < width; col++) {if (src.channels() == 3) {float b = src.at<Vec3b>(row, col)[0];float g = src.at<Vec3b>(row, col)[1];float r = src.at<Vec3b>(row, col)[2];dst.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(b * alpha);dst.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(g * alpha);dst.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(r * alpha);}else if (src.channels() == 1) {float v_gray = src.at<uchar>(row, col);dst.at<uchar>(row, col) = saturate_cast<uchar>(v_gray * alpha);}}}namedWindow(input_win, WINDOW_AUTOSIZE);imshow("output_image", dst);waitKey(0);return 0;
}



五、图像亮度与对比度同时调整:

#include <opencv2/opencv.hpp>
#include <iostream>using namespace std;
using namespace cv;
int main() {Mat src, dst;src = imread("D:\\Myfile\\素材照片\\opencv素材照片\\8.jpg");//src = imread("D:\\Myfile\\素材照片\\opencv素材照片\\8.jpg", IMREAD_GRAYSCALE);//通过imread的读取方式,直接读取单通道的图像if (!src.data) {cout << "could not load image..." << endl;return 0;}//调整为灰度图像进行测试//cvtColor(src, src, COLOR_BGR2GRAY);char input_win[] = "input_image";//用来命名显示窗口的名称namedWindow(input_win, WINDOW_AUTOSIZE);imshow(input_win, src);//用at函数对像素点进行操作,改变对比度和亮度int height = src.rows;int width = src.cols;float alpha = 1.3;float beta = 30;dst = Mat::zeros(src.size(), src.type());for (int row = 0; row < height; row++) {for (int col = 0; col < width; col++) {if (src.channels() == 3) {float b = src.at<Vec3b>(row, col)[0];float g = src.at<Vec3b>(row, col)[1];float r = src.at<Vec3b>(row, col)[2];dst.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(b * alpha + beta);dst.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(g * alpha + beta);dst.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(r * alpha + beta);}else if (src.channels() == 1) {float v_gray = src.at<uchar>(row, col);dst.at<uchar>(row, col) = saturate_cast<uchar>(v_gray * alpha + beta);}}}//转化为32f的,让调整的精度更高!!!!!!!!!!!!!!!!!!!//int height = src.rows;//int width = src.cols;//float alpha = 1.3;//float beta = 30;//Mat src_converto_32f; //转化32f//src.convertTo(src_converto_32f, CV_32F);//dst = Mat::zeros(src.size(), src.type());//for (int row = 0; row < height; row++) {//  for (int col = 0; col < width; col++) {//     if (src.channels() == 3) {//          float b = src_converto_32f.at<Vec3f>(row, col)[0];//         float g = src_converto_32f.at<Vec3f>(row, col)[1];//         float r = src_converto_32f.at<Vec3f>(row, col)[2];//         //增加了精度//           dst.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(b * alpha + beta);//            dst.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(g * alpha + beta);//            dst.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(r * alpha + beta);//        }//     else if (src.channels() == 1) {//         float v_gray = src.at<uchar>(row, col);//            dst.at<uchar>(row, col) = saturate_cast<uchar>(v_gray * alpha + beta);//      }// }//}namedWindow(input_win, WINDOW_AUTOSIZE);imshow("output_image", dst);waitKey(0);return 0;
}



参考文献:
https://blog.csdn.net/ivan_9/article/details/113572880

使用OpenCV调整图像的亮度和对比度相关推荐

  1. Android OpenCV之算数操作与调整图像的亮度和对比度

    Android OpenCV之算数操作与调整图像的亮度和对比度 OpenCV算数API介绍 Mat 对象之间的加.减.乘.除最常用的方法如下: add(Mat src1, Mat src2, Mat ...

  2. 【opencv4.3.0教程】13之调整图像的亮度与对比度

    目录 前言 一.亮度与对比度 1.什么是亮度和对比度 2.亮度和对比度调整原理 3.亮度和对比度调整代码实现 4.API-convertScaleAbs 二.伽马校正 1.伽马校正引入 2.伽马校正原 ...

  3. OpenCV调整图像的亮度

    OpenCV调整图像的亮度 像素越靠近0图像越按,越靠近255,图像越亮,所以调整图片的亮度也就是调整每个像素点数值的大小. 原图 代码 public class DemoMat {static{Sy ...

  4. C++ opencv调整灰度图亮度和对比度的简单算法

    算法目的: 将灰度图的亮度设置为原始图片的bright倍, 对比度设为原始图片的contrast倍 算法原理: 1. 首先计算原始图片的像素平均值m 2. 将每个像素点的像素值p减去m得到d (d=p ...

  5. 调整图像的亮度和对比度

    简单原理: 为输出图像,为输入图像.其中用于调节对比度,增益用于调节亮度 实现代码: #include<opencv2/opencv.hpp> #include<iostream&g ...

  6. (9)调整图像的亮度和对比度

    下面是效果展示图: 下面是代码展示: 1 #include<iostream> 2 #include<opencv.hpp> 3 4 using namespace std; ...

  7. 如何在电脑上调整图像的亮度与对比度?多张图片怎么调整?

    喜欢摄影的小伙伴都知道,一张照片的展示与摄影师的拍照技术有很大关系.如果拍出来的照片太亮或者太暗,色差大都是不合格的.平时一张生活照可以用手机自带调整功能进行处理了.如果需要对多张图片调整亮度对比度, ...

  8. Opencv图像的亮度和对比度调整

    文章目录 前言 一.图像亮度和对比度的基本概念: 1.图像亮度: 2.图像对比度: 二.RGB三通道色彩空间的图像变换: 1.线性变换公式如下: 2.操作简介: 3.图像亮度调整: 4.图像对比度调整 ...

  9. OpenCV基础(3)使用OpenCV调整图像大小

    让我们学习如何使用OpenCV调整图像大小.要调整图像的大小,请根据指定的比例因素或设置所需的高度和宽度,沿着每个轴(高度和宽度)缩放图像. 当调整图像大小: 如果你想在调整后的图像中保持相同的大小, ...

  10. 6.openCV调整图像大小新思路(cv2.resize和imutils.resize)

    6.opencv调整图像大小的新方法imutils.resize 一.openCV 调整图像大小 ( cv2.resize ) 二.项目结构和代码讲解 1.项目结构 2.代码讲解 3.比较 OpenC ...

最新文章

  1. Android 隐式跳转(Activity的隐式跳转)
  2. apiCloud中的数据库操作mcm-js-sdk的使用
  3. java中Array和ArrayList区别 可以将 ArrayList想象成一种会自动扩增容量的Array
  4. CodeForces - 468B Two Sets(并查集+思维)
  5. Spring Boot Actuator:在其顶部具有MVC层的自定义端点
  6. java泛型中的E,K,V,T,U,S
  7. python 打印输出xml数据问题
  8. mldn魔乐java教程_MLDN魔乐JAVA Web全新视频教程(20讲)
  9. 东芝打印机共享怎么设置_东芝网络打印机怎么安装
  10. springboot 解决 NoClassDefFoundError: redis/clients/jedis/util/SafeEncoder
  11. 质量团队在VUCA时代如何走?
  12. 丽江古城历史悠久,古朴自然
  13. dev.env.js和prod.env.js
  14. 送外卖优先级_【超新人\超现实】送外卖需要了解的那些事
  15. uva 672 Gangsters( dp )
  16. 动手训练属于自己的无人车,这个超强服务现已开源!
  17. 破解 Kotlin 协程(6) - 协程挂起篇
  18. 如何直接从我的Android应用程序打开Goog​​le Play商店?
  19. android 换肤框架原理,换肤框架Android-skin-support 源码分析
  20. 用友财务软件常见问题维护

热门文章

  1. 《焦虑心理学》——综述篇
  2. 新手入门 哪个视频剪辑软件好用
  3. 清除chrome浏览器缓存
  4. c语言汉字编码转换,请问如何用C语言实现汉字和Unicode编码的转换 求程序
  5. 高德地图web精准定位
  6. 解决微信开发者工具的不信任问题
  7. VSCode格式化JS自动添加或去掉分号
  8. Excel,WPS如何同时冻结行与列
  9. napi娃娃_第二十九章 干妈
  10. 数据仓库建设规范(文档版)