膨胀腐蚀概述:
膨胀、腐蚀属于形态学的操作, 简单来说就是基于形状的一系列图像处理操作
膨胀腐蚀是基于高亮部分(白色)操作的,膨胀是対高亮部分进行膨胀,类似“领域扩张”,腐蚀是高亮部分被腐蚀,类似“领域被蚕食”
膨胀腐蚀的应用和功能:
消除噪声
分割独立元素或连接相邻元素
寻找图像中的明显极大值、极小值区域
求图像的梯度
其他相关:
开运算、闭运算
顶帽、黒帽
形态学梯度
1)膨胀---dilate()
膨胀就是求局部最大值的操作,从数学角度上来讲,膨胀或腐蚀就是将图像(或区域)A
与核B进行卷积。
核可以是任意大小和形状, 它有一个独立定义的参考点(锚点), 多数情况下,
核是一个小的中间带参考点和实心正方形或者圆盘,可以看做是一个模板或掩码。
膨胀是求局部最大值的操做, 核B与图形卷积,即核B覆盖的区域的像素点的最大值,
并把这个最大值复制给参考点指定的像素,这样就会使图像中的高亮区域逐渐增长,
如下图所示:
函数原型:
src:输入原图像(建议为二值图)
dst:输出图像要求和src一样的尺寸和类型
kernel:膨胀操作的核,当为NULL时,表示使用参考点位于中心的3x3的核
一般使用getStructuringElement获得指定形状和尺寸的结构元素(核)
可选以下三种形状: 矩形、交叉形、椭圆形
ksize和anchor分别表示内核尺寸和锚点位置
anchor:锚的位置,默认值Point(-1,-1),表示位于中心
interations:膨胀的次数
borderType:边界模式,一般采用默认值
borderValue:边界值,一般采用默认值
2)腐蚀---erode()
腐蚀和膨胀相反,是取局部最小值,高亮区域逐渐减小,如下图所示
函数原型:
#include"opencv2/opencv.hpp"
using namespace cv;
void main()
{
Mat src = imread("1.jpg");
Mat dst1, dst2;
Mat element = getStructuringElement(MORPH_RECT,Size(9,9));
dilate(src,dst1,element,Point(-1,-1),1,BORDER_CONSTANT);
erode(src,dst2,element,Point(-1,-1),2);
imshow("原图",src);
imshow("膨胀后图像",dst1);
imshow("腐蚀后图像",dst2);
waitKey(0);
}