本小节,我们来讲解一下,图像的掩模操作,说得高大上,其实就是矩阵与矩阵之间的操作。是为了提高图片的对比度。
如图:
左边是图像,右边是掩模矩阵,然后两个矩阵对应上的元素相乘并相加并得到一个值。
有两种方法来求取图像的掩模:
1、获取图像像素值,然后根据上面公式进行计算。
首先我们要来说说图像的像素值怎么获取:
Mat.ptr<uchar>(int i=0)获取像素矩阵的指针,索引i表示第几行,从0开始计算
Mat src;
const uchar* current=src.ptr<urchar>(0);
当前像素点的像素值p(col,row)=current[col];
还有一个知识点需要了解。
saturate_cast<uchar>
当saturate_cast<uchar>(-100),返回0;
saturate_cast<uchar>(288),返回255;
saturate_cast<uchar>(100),返回100
这个函数可以保证像素值在0-255之间。
那么计算我们知道如何获取像素值了,则可以利用上述公式进行掩膜的计算。
2、使用Opencv提供给我们的filter2D()来进行计算。
参数一:输入图像;
参数二:输出图像;
参数三:输出图像矩阵中元素的一个通道的数据类型。
一般只用到前三个。
接下来看看分别使用两种方式的代码实现。
结果如下:
从结果我们可以看出使用掩模操作确实能够增加图像的对比度,而使用Filter2D和直接计算掩模得出来的效果基本一样。
总结一下:
这小节我们讲了以下几点。
1、掩模的概念和作用:提高对比度。
2、通过像素值来进行掩模计算。
3、通过opencv提供的filter2D进行掩模计算。