11-腐蚀与膨胀
掌握
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);
}
效果
膨胀和腐蚀在形态学中用来消除噪声块;
膨胀(变白):
腐蚀(变黑):