什么是掩膜?
在本篇文章开始前我们需要先来了解一下什么是掩膜,掩膜就是用选定的图像、图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程。用于覆盖的特定图像或物体称为掩模或模板。
掩膜通常是个n*n的矩阵,我们可以通过掩膜来更好地处理图像。
代码解析
首先贴上源码,关于代码的解析我已经写好了注释:
#include<opencv2/opencv.hpp> #include<stdc++.h> using namespace std; using namespace cv; int main() { Mat jun = imread("D:\\壁纸\\jun.png");//读取图片 namedWindow("junbian", CV_WINDOW_AUTOSIZE);//创建窗口 imshow("junbian", jun);//在窗口上显示图片 Mat bian; /* 创建一个掩膜 */ Mat kernel = (Mat_<char>(3,3)<<0, -1, 0, -1, 5, -1, 0,-1, 0); /* 使用filter2D来对图像进行处理 */ filter2D(jun, bian, -1, kernel); namedWindow("cool jun", CV_WINDOW_AUTOSIZE); imshow("cool jun", bian); waitKey(0); return 0; }
让我们来看看结果:
我们会发现处理过后的图像相较于原图对比度增强了。
接下来让我们来换一个掩膜试试看:
#include<opencv2/opencv.hpp> #include<stdc++.h> using namespace std; using namespace cv; int main() { Mat jun = imread("D:\\壁纸\\jun.png");//读取图片 namedWindow("junbian", CV_WINDOW_AUTOSIZE);//创建窗口 imshow("junbian", jun);//在窗口上显示图片 Mat bian; /* 创建一个掩膜 */ Mat kernel = (Mat_<char>(3,3)<<-1, 0, -1, 0, 4, 0, -1,0,-1); /* 使用filter2D来对图像进行处理 */ filter2D(jun, bian, -1, kernel); namedWindow("cool jun", CV_WINDOW_AUTOSIZE); imshow("cool jun", bian); waitKey(0); return 0; }
运行后的结果:
我们可以看到图像的轮廓被描绘了出来,在这里我们使用的掩膜是拉普拉斯滤波器,它可以将画面轮廓清晰地描绘出来。