掌握

1、膨胀;(首先需要获取膨胀和腐蚀的结构元素)
2、腐蚀;
3、代码演示,知道API函数的运用场景;

膨胀

膨胀:属于形态学操作(morphology operators)
1、图像形态学操作–基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学;
2、形态学有4个基本操作:膨胀,腐蚀,开,闭;
3、膨胀与腐蚀是图像处理中最常用的形态学操作手段;
4、膨胀操作与卷积操作类似,为最大值滤波,其中结构元素(卷积算子)可以是任意形状;
注:上图左侧为原图,右图为膨胀后的图,黑色点的像素值小,白色点的像素值大;

腐蚀

1、腐蚀操作与膨胀过程类似,唯一不同的是以最小值替换锚点重叠下图像的像素值(即最小值滤波);

相关API

1、膨胀和腐蚀都需要首先获取结构元素:getStructuringElement();

//获取结构元素API
getStructuringElement(int shape , Size ksize , Point anchor);//anchor: 锚点
shape:  形状,接受宏定义参数:MORPH_RECT\MORPH_CROSS\MORPH_ELLIPSE;
ksize: 大小,必须为奇数
anchor: 锚点,默认Point(-1,-1),为中心像素;

2、膨胀API: dilate(src, dst, kernel);
工作原理:

3、腐蚀API:erode(src, dst, kernel);
工作原理:

4、动态调整结构元素的大小函数:createTrackbar();
trackBar: 滑动条;

Code

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

Mat src, dest;
const char* output = "output image";

int element_Size = 3; //结构元素大小
int max_Size = 21;

void CallBack_Demo(int, void*);

int main(int argc, char** argv)
{
   
	src = imread("C:\\Users\\hello\\Desktop\\bai.jpg");
	if (!src.data)
	{
   
		cout << "could not load the image..." << endl;
		return -1;
	}
	namedWindow("input window", CV_WINDOW_AUTOSIZE);
	imshow("input window", src);
	
	namedWindow(output, CV_WINDOW_AUTOSIZE);
	createTrackbar("Element Size", output, &element_Size, max_Size, CallBack_Demo);//产生滑动条
	CallBack_Demo(0,0);



	waitKey(0);
	return 0;
}
//trackbar---滑动条
//膨胀变白,腐蚀变黑 膨胀和腐蚀可以消除小的噪声块,实际膨胀还是腐蚀根据背景色前景色判断
void CallBack_Demo(int, void*)
{
   
	int s = element_Size * 2 + 1;
	Mat structureElement = getStructuringElement(MORPH_RECT, Size(s, s), Point(-1, -1));
	//膨胀
	//dilate(src, dest, structureElement, Point(-1, -1), 1);//iteration : 迭代次数
	//腐蚀
	erode(src, dest, structureElement); //腐蚀操作
	imshow(output, dest);
}

效果

膨胀和腐蚀在形态学中用来消除噪声块;

膨胀(变白):

腐蚀(变黑):