【知识点梳理

1、防止溢出
  在opencv中,对计算式进行计算的时候经常会出现值溢出(上溢出或下溢出),尤其是对无符号数值进行加减操作时。opencv中使用Saturation Casting“转换很好的解决这个问题,使用saturate_cast<>(),opencv对数组或矩阵进行代数运算或其他操作时,会自动检测underflows and overflows,当结果上溢出时就会用最大的可用值代替,当下溢出时就会用最小的可用值代替。

2、创建全零矩阵图像
  Mat new_image = Mat::zeros( image.size(), image.type() );
  说明:新图像大小与类型与原图像相同,像素值为零。

3、图像线性变换
  image.convertTo(new_image, -1, alpha, beta);
  说明:相当于new_image =saturate_cast(alpha(∗this)(x,y)+beta).第二个参数是输出图像的类型或深度,如果为负则与输入图像的类型或深度相同。

4、图像指数变换

5、创建滑动控件

CV_EXPORTS int createTrackbar(const string& trackbarname, const string& winname,  int* value, int count,  TrackbarCallback onChange = 0,  void* userdata = 0);  参数一:trackbarname:滑动控件的名称;参数二:winname:滑动控件用于依附的图像窗口的名称;参数三:value:初始化阈值;参数四:count:滑动控件的刻度范围;参数五:TrackbarCallback是回调函数

代码示例

#include <iostream>
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"using namespace std;
using namespace cv;namespace
{/*全局变量*/int alpha = 100;int beta = 100;int gamma_cor = 100;Mat img_original, img_corrected, img_gamma_corrected;void basicLinearTransform(const Mat &img, const double alpha_, const int beta_)  // 基本线性变换{Mat res;img.convertTo(res, -1, alpha_, beta_);          // res = alpha_ * img + beta_ hconcat(img, res, img_corrected);               // 连接矩阵,等同于:img_corrected = [img res]}void gammaCorrection(const Mat &img, const double gamma_){CV_Assert(gamma_ >= 0);Mat lookUpTable(1, 256, CV_8U);                                     // 查找表uchar* p = lookUpTable.ptr();for (int i = 0; i < 256; ++i)p[i] = saturate_cast<uchar>(pow(i / 255.0, gamma_)*255.0);      // pow()是幂次运算Mat res = img.clone();LUT(img, lookUpTable, res);                                         // LUT hconcat(img, res, img_gamma_corrected);}void on_linear_transform_alpha_trackbar(int, void *)                    // alpha 控制条{double alpha_value = alpha / 100.0;int beta_value = beta - 100;basicLinearTransform(img_original, alpha_value, beta_value);}void on_linear_transform_beta_trackbar(int, void *){double alpha_value = alpha / 100.0;int beta_value = beta - 100;basicLinearTransform(img_original, alpha_value, beta_value);}void on_gamma_correction_trackbar(int, void *)                          // gamma 控制条{double gamma_value = gamma_cor / 100.0;gammaCorrection(img_original, gamma_value);}
}int main(int argc, char** argv)
{String imageName("../data/lena.jpg");img_original = imread(imageName);img_corrected = Mat(img_original.rows, img_original.cols * 2, img_original.type());img_gamma_corrected = Mat(img_original.rows, img_original.cols * 2,img_original.type());hconcat(img_original, img_original, img_corrected);hconcat(img_original, img_original, img_gamma_corrected);namedWindow("Brightness and contrast adjustments", WINDOW_AUTOSIZE);namedWindow("Gamma correction", WINDOW_AUTOSIZE);createTrackbar("Alpha gain (contrast)", "Brightness and contrast adjustments",&alpha,500, on_linear_transform_alpha_trackbar);createTrackbar("Beta bias (brightness)", "Brightness and contrast adjustments", &beta, 200, on_linear_transform_beta_trackbar);createTrackbar("Gamma correction", "Gamma correction", &gamma_cor, 200, on_gamma_correction_trackbar);while (true){imshow("Brightness and contrast adjustments", img_corrected);imshow("Gamma correction", img_gamma_corrected);int c = waitKey(30);                // 延时30毫秒if (c == 27)                        // 按键escbreak;}return 0;
}

运行结果


【OpenCV】图片对比度和亮度相关推荐

  1. C# EmguCV 修改图片对比度、亮度

    C# EmguCV 修改图片对比度.亮度 1.公式 g(x) = k*f(x)+b f(x) 原图片的像素点颜色 g(x)改变对比度后的像素点颜色 k 对比度改变系数 b 像素点增加的亮度 C# 代码 ...

  2. opencv关于对比度和亮度的误解

    1 对比度与亮度概念 亮度调整:图像像素强度整体变高/变低. 对比度调整:图像暗处像素强度变低,图像亮处像素强度变高,从而拉大中间某个区域范围的显示精度. 通过设计一个映射曲线就可完成对比度.亮度调整 ...

  3. 转载:【opencv入门教程之六】创建Trackbar图片对比度、亮度值调整

    [OpenCV入门教程之六] 创建Trackbar & 图像对比度.亮度值调整 浅墨_毛星云 2014-03-18 21:43:18 103746 收藏 21 最后发布:2014-03-18 ...

  4. python实现opencv学习七:粗略的调整图片对比度和亮度

    代码: # -*- coding=GBK -*- import cv2 as cv import numpy as np# 粗略的调节对比度和亮度 def contrast_brightness_im ...

  5. 7、粗略的调整图片对比度和亮度

    代码 解释都在注释里啦 import numpy as nm import cv2 as cv def adjust(img1,x,y):h,w,c=img1.shape#获得img1的参数heigh ...

  6. 对图片对比度和亮度的理解

    对比度我们一般可以联想为:黑-----------白 ,就是变亮的过程 而亮度表示的则是颜色的明暗程度:主要针对的是颜色与颜色自身之间的变化,例如蓝色,有深蓝,有浅蓝,黑色有暗黑和纯黑 不知道这么单面 ...

  7. 2-opencv增加图片对比度和亮度

    1-方法一 g(x) = a* f(x) +b 其中,a增加图像对比度(取值0.0-3.0),b增加图像亮度 #include <iostream> #include<opencv2 ...

  8. OpenCV—Python 对比度与亮度调整

    对比度与亮度调整方法1 对图片对比度和亮度的调整一般通过下面公式计算: g(x,y)=a∗f(x,y)+bg(x,y) = a*f(x,y)+bg(x,y)=a∗f(x,y)+b f(x,y)f(x, ...

  9. OpenCV 图片亮度与对比度 轨迹条

    #include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostre ...

最新文章

  1. HashSet中的add()方法( 五 )(详尽版)
  2. 实现点击下载文件的几种方法
  3. 清除绊脚石(不定期更新)
  4. 第 21 章 radiusd - Authentication, Authorization and Accounting server
  5. 小学身高体重测试软件,学生身高、体重检测汇总分析
  6. DeepFakes天敌来了!伯克利紧急研发“火眼金睛”防伪克星
  7. 张小龙做微信公众号APP,对自媒体是祸还是福?
  8. MIPS指令:常用R型、I型、J型指令编解码表
  9. uniapp下载文件保存到手机本地
  10. 【真的很先进】阿里云在2018-KVM Forum上分享的动态迁移实践
  11. 【转】用C#获取浏览文件夹对话框
  12. 【bug解决】No OpKernel was registered to support Op 'CudnnRNN' with these attrs.
  13. 安卓监听是否有闹钟设置
  14. 区块链项目数据存储系统分析
  15. 开放系统理论(3)生物的特征——热力学第二定律,和熵(2)续--有什么
  16. 68个经典励志小故事,让你终身受益[转]
  17. js写一个开心消消乐
  18. 制作京东快报页面html,HTML第6章上机练习3(制作京东快报页面)
  19. 2021年5月:百度最近的文章收录变慢了?连老站都不好使了?
  20. 人工智能 DFS 分啤酒问题 Java

热门文章

  1. html email输入框,html5给文本框实现email域名自动完成效果
  2. Python脚本生成单个EXE文件
  3. pytorch学习笔记(二十八):循环神经网络的从零开始实现
  4. 一维前缀和(附模板题)
  5. (C语言)最长公共子串
  6. 重装Windows10系统(Win10系统)
  7. 理解metrics.classification_report
  8. CSDN10大博客栏目火热评选中
  9. HTML 中img标签不显示
  10. ubuntu 操作记录