腐蚀:将高亮部分缩小
膨胀:将高亮部分扩大
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>
#define WINDOWNAME "1"
using namespace cv;
using namespace std;
int g_type;
int g_cur;
int g_max;
Mat srcImage;
Mat dstImage;
Mat kernel;
void on_call(int,void*){
kernel=getStructuringElement(MORPH_RECT,Size(g_cur+1,g_cur+1));//自定义kernel,并防止Size()中参数为0
if(g_type==0){
erode(srcImage,dstImage,kernel);
}else{
dilate(srcImage,dstImage,kernel);
}
imshow(WINDOWNAME,dstImage);
}
int main(){
srcImage=imread("redflo.bmp",1);
g_cur=1;
g_max=20;
g_type=0;
namedWindow(WINDOWNAME);//有createTrackbar()时不可省略
createTrackbar("ero/dil",WINDOWNAME,&g_type,1,on_call);
createTrackbar("kernel",WINDOWNAME,&g_cur,g_max,on_call);
on_call(0,NULL);
waitKey(0);
}
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main(){
Mat srcImage=imread("test.jpg",1);
imshow("src",srcImage);
Mat dstImage;
Mat kernel=getStructuringElement(MORPH_RECT,Size(10,10));
morphologyEx(srcImage,dstImage,MORPH_ERODE,kernel);//腐蚀
imshow("erode",dstImage);
morphologyEx(srcImage,dstImage,MORPH_DILATE,kernel);//膨胀
imshow("dilate",dstImage);
morphologyEx(srcImage,dstImage,MORPH_CLOSE,kernel);//闭运算,先膨胀后腐蚀
imshow("close",dstImage);
morphologyEx(srcImage,dstImage,MORPH_OPEN,kernel);//开运算,先腐蚀后膨胀
imshow("open",dstImage);
morphologyEx(srcImage,dstImage,MORPH_BLACKHAT,kernel);//黑帽,闭运算减去原图
imshow("blackhat",dstImage);
morphologyEx(srcImage,dstImage,MORPH_TOPHAT,kernel);//顶帽,原图减去开运算
imshow("tophat",dstImage);
morphologyEx(srcImage,dstImage,MORPH_GRADIENT,kernel);//梯度,膨胀减去腐蚀
imshow("gradient",dstImage);
waitKey(0);
}