形态学操作
基于形状的一系列图像处理操作,通过将结构元素作用于输入图像来产生输出图像。
最基本的两种形态学操作:腐蚀(Erosion)与膨胀(Dilation)
应用:消除噪声
分割独立的图像元素,以连接相邻的元素
寻找图像中明显的极大值区域与极小值区域
以以下图片为例:
膨胀
将此图像A与任意形状的内核B(通常为正方形或圆形)进行卷积
内核B有一个可定义的锚点,通常定义为内核中心点。
进行膨胀操作时,将内核B划过图像,将内核B覆盖区域的最大像素提取,并代替锚点位置
的像素。这一操作将会导致图像中的亮区开始扩展
腐蚀
提取内核覆盖下像素的最小值
将内核B划过图像,将内核B覆盖区域的最小像素值提取,并代替锚点位置的像素。
函数
erode(src,dst,element)
src:输入图像
dst:输出图像
element:输入操作的内核,如果不指定默认为3*3的内核,否则,需要明确指定它的形状。可以使用函数
getStructureElement(erosion_type,
Size(2*erosion_size+1,2*erosion_size+1),
Point(erosion_size,erosion_size))
内核可以选择以下三种之一:矩形 MORPH_RECT
交叉形MORPH_CROSS
椭圆形MORPH_ELLIPSE
#include <opencv2/opencv.hpp> #include <iostream> #include<windows.h> using namespace std; using namespace cv; int main() { Mat src = imread("D:\Pic\1.jpg"); //存放自己图像的路径 Mat erosion_dst, dilation_dst; Mat element = getStructuringElement(MORPH_RECT, Size(3, 3), Point(1, 1)); erode(src, erosion_dst, element); dilate(src, dilation_dst, element); namedWindow("Image", CV_WINDOW_AUTOSIZE); namedWindow("Erosion Demo", CV_WINDOW_AUTOSIZE); namedWindow("Dilation Demo", CV_WINDOW_AUTOSIZE); imshow("Image", src); imshow("Erosion Demo", erosion_dst); imshow("Dilation Demo", dilation_dst); waitKey(0); system("pause"); return 0; }