【OpenCV】对比度增强之线性变换

原理讲解
输入的图像为I,宽为W,高为H,输出图像记为O,图像的线性变换可以利用以下公式定义:
在这里插入图片描述
当a=1,b=0时,O为I的一个副本;
如果a>1则输出图像O的对比度比I有所增大;
如果0<a<1,则O的对比度比I有所减小;
而b值的改变,影响的是输出的亮度,当b>0时,亮度增加;当b<0时,亮度减小。
举例:假设图像的灰度级范围是[50,100],通过a=2,b=0的线性变换,可以将输出图像的灰度级拉伸到[100,200],灰度级范围有所增加, 从而提高了对比度;而如果令a=0.5,b=0,则输出图像的灰度级会压缩到[25,50],灰度级范围有所减小,则降低了对比度。

实现方式
在OpenCV中实现一个常数与矩阵相乘有多种方式。
第一种方式:通过Mat的成员函数
Mat::convertTo(OutputArray m, int rtype,double alpha=1,double beta=0)
实现线性变换,该函数参数之间的关系如下:

m(x,y)=saturate_cast<rtype>(alpha(*this)(x,y)+beta)

其中参数m代表输出矩阵,参数rtype是输出矩阵m的数据类型,参数alpha和beta分别可以理解为线性变换中的a和b.利用该函数实现线性变换的示例代码如下:

Mat I = (Mat_<uchar>(2,2)<<0,200,23,4);
Mat O;
I.convertTo(0,CV_8UC1,2.0,0);

其中输入的I的数据类型为uchar,打印输出O的值,结果为:[[0,255],[46,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值