掩膜区域内像素值_掩膜(mask)

1.掩膜(mask)的定义

用选定的图像,图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程。用于覆盖的特定图像或物体称为掩模或模板。光学图像处理中,掩模可以足胶片,滤光片等。

掩模是由0和1组成的一个二进制图像。当在某一功能中应用掩模时,1值区域被处理,被屏蔽的0值区域不被包括在计算中。通过指定的数据值,数据范围,有限或无限值,感兴趣区和注释文件来定义图像掩模,也可以应用上述选项的任意组合作为输入来建立掩模。

掩膜是一种图像滤镜的模板,实用掩膜经常处理的是遥感图像。当提取道路或者河流,或者房屋时,通过一个N * N的矩阵来对图像进行像素过滤,然后将我们需要的地物或者标志突出显示出来。这个矩阵就是一种掩膜。

在OpenCV的中,掩模操作是相对简单的。大致的意思是,通过一个掩模矩阵,重新计算图像中的每一个像素值。掩模矩阵控制了旧图像当前位置以及周围位置像素对新图像当前位置像素值的影响力度。用数学术语讲,即我们自定义一个权重表。

2.掩膜的用法

2.1 提取感兴趣区:用预先制作的感兴趣区掩膜与待处理图像相乘,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0;

2.2 屏蔽作用:用掩膜对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计;

2.3 结构特征提取:用相似性变量或图像匹配方法检测和提取图像中与掩膜相似的结构特征;

2.4 特殊形状图像的制作。

3.掩膜运算的一个小实例

以图和掩膜的与运算为例:

原图中的每个像素和掩膜中的每个对应像素进行与运算。比如1 & 1 = 1;1 & 0 = 0;

比如一个3 * 3的图像与3 * 3的掩膜进行运算,得到的结果图像就是:

掩膜区域内像素值_掩膜(mask)_第1张图片

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

矩阵的掩膜操作十分简单,根据掩膜来重新计算每个像素的像素值,掩膜(mask)也被称为内核。

通过掩膜操作实现图像对比度提高。

I(i,j) = 5*I(i,j) - [I(i-1,j) + I(i+1,j) + I(i,j-1) + I(i,j+1)]

Mat kern = (Mat_(3,3) << 0, -1, 0,

-1, 5, -1,

0, -1, 0);

红色是中心像素,从上到下,从左到右对每个像素做同样的处理操作,得到最终结果就是对比度提高之后的输出图像垫对象。

实例代码:

#include

#include

#include

using namespace std;

using namespace cv;

int main()

{

Mat src, dst;

src = imread("E:\\VS2015Opencv\\vs2015\\project\\picture\\cat.jpg");

if (!src.data)

{

cout << "could not load image..." << endl;

return -1;

}

namedWindow("source image", CV_WINDOW_AUTOSIZE);

imshow("source image", src);

//1).empty() 判断文件读取是否正确

//2).rows 获取图像行数(高度)

//3).cols 获取图像列数(长度)

//4).channels() 获取图像通道数

//5).depth() 获取图像位深度

//【1】记录程序开始点timeStart

double timeStart = (double)getTickCount();//计算时间语句

//进行矩阵的掩膜操作

int cols = (src.cols - 1)*src.channels();//837 //获取图像的列数,一定不要忘记图像的通道数

int offsetx = src.channels();//图像的通道数 3

int rows = src.rows;//220

dst = Mat::zeros(src.s

你可能感兴趣的:(掩膜区域内像素值)