腐蚀是指对高亮部分进行腐蚀,高亮区域更小
膨胀,是指对高亮部分进行膨胀 ,高亮区域更大
开运算,闭运算,形态学梯度,顶帽,黑帽
其中开运算是 先腐蚀后膨胀 ,闭运算先膨胀后腐蚀,形态学梯度:膨胀度与腐蚀图之差,顶帽:原图-开运算;黑帽:闭运算-原图
效果图
最左边腐蚀,中间膨胀,最右边原图
c++版本
1)腐蚀与膨胀
无论是腐蚀和膨胀都需要设定核
#include <iostream>
#include <opencv/cv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
//主函数
int main(void)
{
//读取原始图像
Mat srcImage=imread("/home/liuxin/桌面/opencv/dog.jpeg");
imshow("original",srcImage);
//获取自定义核
Mat element,Dilate,Erode;
element=getStructuringElement(MORPH_RECT,Size(15,15));
//进行膨胀操作
dilate(srcImage,Dilate,element);
erode(srcImage,Erode,element);
//显示结果
imshow("Dilate(PengZhang)",Dilate);
imshow("Erode(FuShi)",Erode);
while(1)
{
int key=cvWaitKey(10);
if (key==27)
{
break;
}
}
return(0);
}
2)开运算,闭运算,形态学梯度,顶帽,黑帽
这几个可以用一个函数morphologyEX()
,改一下标识符就可以了
- MORPH_OPEN 开运算
- MORPH_CLOSE 闭运算
- MORPH_GRADIENT 形态学梯度
- MORPH_TOPHAT 顶帽
- MORPH_BLACKHAT 黑帽
源代码
#include <iostream>
#include <opencv/cv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
//主函数
int main(void)
{
//读取原始图像
Mat srcImage=imread("/home/liuxin/桌面/opencv/dog.jpeg");
imshow("original",srcImage);
//获取自定义核
Mat element,open,close,gradient,tophat,blackhat;
element=getStructuringElement(MORPH_RECT,Size(15,15));
//进行开,闭,形态学,顶帽,黑帽操作
morphologyEx(srcImage,open,MORPH_OPEN,element);
morphologyEx(srcImage,close,MORPH_CLOSE,element);
morphologyEx(srcImage,gradient,MORPH_GRADIENT,element);
morphologyEx(srcImage,tophat,MORPH_TOPHAT,element);
morphologyEx(srcImage,blackhat,MORPH_BLACKHAT,element);
//显示结果
imshow("open",open);
imshow("close",close);
imshow("gradient",gradient);
imshow("tophat",tophat);
imshow("blackhat",blackhat);
while(1)
{
int key=cvWaitKey(10);
if (key==27)
{
break;
}
}
return(0);
}