#include<iostream>
#include<opencv2/opencv.hpp>
#define window1 "【结果1】"
#define window "【原图】"
#define window2 "【结果2】"
#define window3 "【结果3】"
#define window4 "【结果4】"
#define window5 "【结果5】"
using namespace std;
using namespace cv;
Mat src,dst;
Mat element;
int n_kersize = 3;//初始值为3.
int type=0;
void on_type(int, void*);
void on_size(int, void*);
void process();
//对一副图像进行不同核大小的腐蚀于膨胀,用两个滑动条来进行分别表示腐蚀,膨胀类型和核心大小(3以上)
int main()
{
system("color5E");
//1.载入原图
src = imread("猫咪.jpg",0);
//2.缩放和灰度化
resize(src,src,Size(),0.6,0.6);
imshow(window,src);
//3.进行第一次腐蚀,在结果1上。
element=getStructuringElement(MORPH_RECT,Size(n_kersize*2+1,n_kersize*2+1),Point(n_kersize,n_kersize));
erode(src,dst,element);
imshow(window1,dst);
//4.创建两个回调函数。
createTrackbar("操作类型",window1,&type,1,on_type);
createTrackbar("操作尺度",window1,&n_kersize,21,on_size);
waitKey(0);
return 0;
}
//5.两个回调函数的定义。
void on_type(int,void*)
{
process();
}
void on_size(int, void*)
{
process();
}
//6.操作处理函数的定义。process
void process()
{
element = getStructuringElement(MORPH_RECT, Size(n_kersize * 2 + 1, n_kersize * 2 + 1), Point(n_kersize, n_kersize));
if (type == 0)
{
erode(src,dst,element);
}
else
{
dilate(src,dst,element);
}
imshow(window1,dst);
}
0代表腐蚀:
1代表膨胀: