前言

1.数字图像处理中的掩膜的概念是起源于于PCB制版的过程,在半导体制造中,许多芯片工艺步骤采用光刻技术,用于这些步骤的图形“底片”称为掩膜(也称作“掩模”),其作用是:在硅片上选定的区域中对一个不透明的图形模板遮盖,继而下面的腐蚀或扩散将只影响选定的区域以外的区域。
2.图像掩膜与其类似,用选定的图像、图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程。
光学图像处理中,掩模可以是胶片、滤光片等。数字图像处理中,掩模为二维矩阵数组,有时也用多值图像。
3.数字图像处理中,图像掩模主要用于:
①提取感兴趣区,用预先制作的感兴趣区掩模与待处理图像相乘,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0。
②屏蔽作用,用掩模对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计。
③结构特征提取,用相似性变量或图像匹配方法检测和提取图像中与掩模相似的结构特征。
④特殊形状图像的制作。
4.掩膜是一种图像滤镜的模板,实用掩膜经常处理的是遥感图像。当提取道路或者河流,或者房屋时,通过一个n*n的矩阵来对图像进行像素过滤,然后将我们需要的地物或者标志突出显示出来。这个矩阵就是一种掩膜。

代码演示

1.下面是用掩膜来增加图像对比度的函数,可以看它实现的公式:

**I(i,j)=5∗I(i,j)−[I(i−1,j)+I(i+1,j)+I(i,j−1)+I(i,j+1)]**
void mask(Mat &input, Mat &dest)
{
	//生成一个和源图像大小相等类型相同的全0矩阵
	dest = Mat::zeros(input.size(), input.type());
	//获取图像的列数
	int cols = (input.cols - 1)*input.channels();
	//获取图像的行数
	int rows = input.rows;
	//获取图像通道数
	int channel = input.channels();

	//遍历行数
	for (int row = 1; row < rows - 1; row++) 
	{
		//上一行
		uchar* previous = input.ptr<uchar>(row - 1);
		//当前行
		uchar* current = input.ptr<uchar>(row);
		//下一行
		uchar* next = input.ptr<uchar>(row + 1);

		//输出图像的行
		uchar* output = dest.ptr<uchar>(row);
		//开始对每个像素做掩膜操作
		for (int col = channel; col < cols; col++)
		{
			output[col] = saturate_cast<uchar>(5 * current[col] - (current[col - channel] + current[col + channel] + previous[col] + next[col]));
		}
	}
}

测试结果:

opencv 眼部遮盖 opencv图像掩膜_图像匹配