OpenCV 矩阵的掩膜操作

掩膜操作

什么是掩膜操作?

掩膜操作是指根据掩膜矩阵(也称作核kernel)重新计算图像中每个像素的值。掩膜矩阵中的值表示了邻近像素值(包括该像素自身的值)对新像素值有多大的影响。从数学的观点来看,我们用自己设置的权值,对像素领域内的值做了个加权平均。

比如,下面这个公式表示用5倍当前像素的值减去该像素上、下、左、右四个像素值和,得到的结果赋值给当前像素。使用该公式可以用于提升图像的对比度。调节I(i,j)的系数权重可以得到不同的对比度提升效果。

在这里插入图片描述

上面的公式可以用掩膜矩阵表示成如下的形式。

在这里插入图片描述

掩膜操作可以实现图像对比度的调整,使得图像可以锐化,提高图像对比度。

掩膜操作实现图像对比度调整

红色是中心像素,从上到下,从左到右对每个像素做同样的处理操作,得到最终结果就是对比度提高之后的输出图像Mat对象
在这里插入图片描述


下面我们继续探究,如果要想进行掩膜操作,就要先获取图像像素指针和进行像素范围处理

如何获取图像像素指针?

CV_Assert(myImage.depth() == CV_8U); 

Mat.ptr(int i=0) 获取像素矩阵的指针,索引i表示第几行,从0开始计行数。
获得当前行指针const uchar* current=myImage.ptr(row );
获取当前像素点P(row, col)的像素值 p(row, col) =current[col]

如何像素范围处理?

什么是像素范围处理?

我们在设置图像像素的灰度值或者RGB值时候,如果不了解,会随意设置,以RGB为例,他们的取值范围是从0 到255,所以如果我们输入范围以外的数据,为防止程序出错,我们需要控制范围,保证我们输入非法数据时候,不会导致程序出现问题。

处理的原则如下:

如果我们输入小于0的值,它会返回0,
如果我们输入大于255的值,它会返回255,
如果我们输入0-255之间的值,它会正常返回。

那么我们用的时候怎么进行处理呢?

这里就要用到像素范围处理函数saturate_cast<uchar>

像素范围处理API——saturate_cast<uchar>

saturate_cast<uchar>-100),返回 0。
saturate_cast<uchar>288),返回255
saturate_cast<uchar>100),返回100

这个函数的功能是确保RGB值得范围在0~255之间

掩膜操作的API——filter2D

掩膜操作的API是filter2D,函数原型是:

void filter2D( 
    InputArray src, 
    OutputArray dst, 
    int ddepth,                            
    InputArray kernel, 
    Point anchor = Point(-1,-1),                            
    do
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清河大善人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值