OpenCV学习笔记之改变图像的对比度和亮度
一、图像对比度和亮度
图像对比度指的是一幅图像中明暗区域最亮的白和最暗的黑之间不同亮度层级的测量,即指一幅图像灰度反差的大小。差异范围越大代表对比越大,差异范围越小代表对比越小,好的对比率120:1就可容易地显示生动、丰富的色彩,当对比率高达300:1时,便可支持各阶的颜色。
韦伯定律(感觉阈值定律): [2] 在同种刺激下,人所能感受到的刺激的动态范围正比于标准刺激的强度,K=ΔI/I K为给定刺激下的常数,I为刺激,ΔI为能感受到的刺激的动态范围。
应用到人的视觉刺激,定义韦伯对比度为:
I为物体的亮度,Ib为背景的整体亮度。
Michelson对比度
Michelson [3] 对比度又被称为“能见度”,定义为:
其中的 和
分别表示最亮的亮度和最暗的亮度。Michelson对比度与人的视觉感受中视锥细胞对视场光通量的空域频率的感受程度在理论上是一致的。
均方根对比度
Peli 于1990年提出,与内容的空域频率和空域分布均无关的图像的对比度,被定义成一幅光栅图像内像素值的 [4] 均方根(也就是标准差):
其中
描述的是一幅宽和高分别为w和h的光栅图,
是图像中指定位置的一个像素点的值,
是图的亮度(像素平均值),
是均方根对比度(像素标准差)。
对于数字图像变换,设原像素灰度为 f(i,j),转化后的像素灰度为 g(i,j),则常用的线性变换是 g(i,j)= af(i,j) + b, 其中系数 a 影响图像的对比度,系数 b 影响图像的亮度,具体如下:
(1) a=1时是原图;
(2) a>1时对比度增强,图像看起来更加清晰;
(3) a<1时对比度减弱,图像看起来变暗;
(4) b影响图像的亮度,随着增加b (b>0)和减小b (b>0),图像整体的灰度值上移或者下移, 也就是图像整体变亮或者变暗, 不会改变图像的对比度
二、实践操作
#include <QCoreApplication>
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/imgcodecs.hpp>
#include <QDebug>
#include <QDir>
#include <QFile>
#include "iostream"using namespace std;
using namespace cv;int main()
{double alpha = 2.2 , beta = 50;Mat oriImg;//! 读取图片oriImg = imread("C:/1.png",IMREAD_COLOR);if( !oriImg.data ) { qDebug("Error loading src1 \n"); return -1; }imshow("ori",oriImg);//! 图片大小要一致Mat resImg = Mat::zeros( oriImg.size(), oriImg.type() ); //! 执行运算 resImg(i,j) = alpha*oriImg(i,j) + betafor( int y = 0; y < oriImg.rows; y++ ){for( int x = 0; x < oriImg.cols; x++ ){for( int c = 0; c < 3; c++ ){resImg.at<Vec3b>(y,x)[c] = saturate_cast<uchar>( alpha*( oriImg.at<Vec3b>(y,x)[c] ) + beta );}}}imshow( "adjust", resImg );waitKey(0);return 0;
}
参考资料:
- 图像对比度和亮度
- 改变图像的对比度和亮度
附录1:saturate_cast作用
为了安全转换,运算结果可能超出像素取值范围(溢出),还可能是非整数(如果是浮点数的话),用saturate_cast对结果进行转换,以确保它为有效值。
OpenCV学习笔记之改变图像的对比度和亮度相关推荐
- OpenCV学习:改变图像的对比度和亮度
本实例演示简单地改变图像的对比度和亮度,使用了如下线性变换来实现像素值的遍历操作: The parameters α > 0 and β often called the gain and bi ...
- 独家|OpenCV 1.6 改变图像的对比度和亮度!
翻译:陈之炎 校对:吴金迪本文约2500字,建议阅读5分钟本文为大家介绍了OpenCV改变图像的对比度和亮度. 目标 在本教程中, 你将学习到以下内容: 访问像素值; 用零初始化矩阵; 学习CV :: ...
- OpenCV改变图像的对比度和亮度
OpenCV改变图像的对比度和亮度 改变图像的对比度和亮度 目标 理论 图像处理 像素变换 亮度和对比度调整 代码 解释 结果 改变图像的对比度和亮度 目标 在本教程中,您将学习如何: 访问像素值 用 ...
- opencv 学习笔记9:图像缩放与图像翻转
图像缩放 缩放包括缩小和放大 语法格式 cv2.resize()有很多参数,其中src和dsize必备 cv2.resize(src.dsize) src原始图像路径 dsize 目标图像大小 (列, ...
- opencv学习笔记7:图像加法与图像融合
图像加法 1.使用Numpy加法 运算方式:结果=图像1+图像2 原理:图像数据格式为unit8 8位二进制表示范围是0到255. 二进制相加 1.不超过255的,如100+58=158 2.两数相加 ...
- [转载] opencv学习笔记7:图像加法与图像融合
参考链接: python opencv 基础 4: addWeighted() 融合两张图像 图像加法 1.使用Numpy加法 运算方式:结果=图像1+图像2 原理:图像数据格式为unit8 8位二进 ...
- opencv学习笔记20:图像轮廓
图像轮廓 Contours:轮廓 轮廓是将没有连着一起的边缘连着一起. 边缘检测检测出边缘,边缘有些未连接在一起. 注意问题 1.对象为二值图像,首先进行阈值分割或者边缘检测. 2.查找轮廓需要更改原 ...
- opencv学习笔记19:图像金字塔和图像拉普拉斯金字塔 (用于图像放大和缩小)
图像金字塔原理 图像金字塔:只不同分辨率,不同尺寸子图构成的集合. 取样 向下取样:有一个图像G0,对它重新采样,得到分辨率小些的G1,以此类推. 向上取样:有一个图像G3,然后变成像素更多的G2,以 ...
- opencv学习笔记14:图像礼帽,图像黑帽
python + OpenCV 图像礼帽 图像礼帽 也叫图像顶帽 礼帽图像=原始图像-开运算图像 得到噪声图像 开运算:先腐蚀再膨胀 使用对象:二值图像 使用方法:morphologyEx cv2.M ...
最新文章
- 查看当前svn账户_SVN-基础教程学习
- 火力发电厂与变电站设计防火规范_2019年《建筑设计防火规范》新版征求意见稿...
- java ctp行情_java-ctp
- 第十七期:记一次生产环境SQL Server服务器卡顿问题解决--内存分配不当
- 基于MaxCompute 衣二三帮助客户找到合适自己的衣服
- vscode运行python文件_vscode怎么运行python文件
- mysql删除新添加数据,MySQL添加、更新与删除数据
- 在html5中 空标签可以不写,HTML5中标签之间尽量不要加enter或者空格
- matlab串联矩阵如何表示,MATLAB串联矩阵
- Eason's concert
- 国外的服务器国内可以直连吗,国内服务器和境外服务器有什么区别?
- 微信小程序使用 checkbox 如何修改样式?
- 163vip.com登陆TOM邮箱,定位商务人士的专属邮箱!
- 模板引擎不关心内容之——art-template,碰见的同步与fs.readFile异步以及函数回调问题的描述,针对fs的readfille读取文件时,返回不了异步函数返回值的解决方法
- 柏楚系统和倍福系统哪个好_西门子和倍福系统优劣对比-专业自动化论坛-中国工控网论坛...
- 两万字长文总结,梳理 Java 入门进阶哪些事(推荐收藏)
- 百度文库的wenku前边加wap就能复制,优酷播放页youku后加xia就能直接下载视频
- 返回code400,报错Required request body is missing
- ANSYS软件之问题1——调出HFSS模块
- Progressive Downloader for Mac(mac不限速下载器)
热门文章
- boost::parameter::aux::unwrap_cv_reference相关的测试程序
- 用作键提取器的函数的 Boost.MultiIndex 示例
- Boost::context模块fiber的jump_mov测试程序
- Boost:自定义小矢量的测试程序
- Boost:bind绑定的==,!=,<,<=,>,> =运算符的测试程序
- Boost:bimap双图lambda表达式的测试程序
- DCMTK:测试VR类的compare()运算符
- VTK:可视化之DisplayCoordinateAxes
- VTK:图片之ImageCorrelation
- 将C ++类型的属性公开给QML