
简单来讲,形态学 *** 作就是基于形状的一系列图像处理 *** 作。通过将 结构元素 作用于输入图像来产生输出图像。
最基本的形态学 *** 作有二:腐蚀与膨胀(Erosion 与 Dilation)。 他们的运用广泛:
1、消除噪声
2、分割(isolate)独立的图像元素,以及连接(join)相邻的元素。
3、寻找图像中的明显的极大值区域或极小值区域。
注意:腐蚀和膨胀是对白色区域(高亮部分)而言,不是黑色部分;膨胀是图像中高亮部分进行膨胀,效果图拥有比原图更大的高亮区域;腐蚀是图像中高亮部分进行腐蚀,效果图拥有比原图更小的高亮区域。
膨胀求局部最大值,并把最大值赋给参考点指定的像素,这样会使得图像中高亮区域逐渐增长。
进行 腐蚀 *** 作的函数是 dilate 。 它接受了三个参数:
src: 原图像
dilate _dst: 输出图像
element: 腐蚀 *** 作的内核。 如果不指定,默认为一个简单的 矩阵。否则,我们就要明确指定它的形状,可以使用函数 getStructuringElement:
我们可以为我们的内核选择三种形状之一:
- 矩形: MORPH_RECT
- 交叉形: MORPH_CROSS
- 椭圆形: MORPH_ELLIPSE
然后,我们还需要指定内核大小,以及 锚点 位置。不指定锚点位置,则默认锚点在内核中心位置。
腐蚀求局部最小值,并把最小值赋给参考点指定的像素,这样会使得图像中高亮区域逐渐减少。
进行 腐蚀 *** 作的函数是 erode 。 它接受了三个参数:
src: 原图像
erosion_dst: 输出图像
element: 腐蚀 *** 作的内核。 如果不指定,默认为一个简单的 矩阵。否则,我们就要明确指定它的形状,可以使用函数 getStructuringElement:
我们可以为我们的内核选择三种形状之一:
- 矩形: MORPH_RECT
- 交叉形: MORPH_CROSS
- 椭圆形: MORPH_ELLIPSE
然后,我们还需要指定内核大小,以及 锚点 位置。不指定锚点位置,则默认锚点在内核中心位置。
程序#include#include #include #include #include #include using namespace cv; using namespace std; //--------------------------------------【main( )函数】----------------------------------------- // 描述:控制台应用程序的入口函数,我们的程序从这里开始执行 //------------------------------------------------------------------------------------------------- Mat src = imread("D:\VC\c++\opencv源码\opencv源码\12.bmp"); Mat dst1 ,dst2; int p = 3;//膨胀参数值 int f = 4;//腐蚀参数值 //膨胀回调函数 void on_p(int, void*) { Mat element = getStructuringElement(MORPH_ELLIPSE, Size(p * 2 + 1, p * 2 + 1)); dilate(src, dst1, element); imshow("膨胀图", dst1); } //腐蚀回调函数 void on_f(int, void*) { Mat element1 = getStructuringElement(MORPH_ELLIPSE, Size(f * 2 + 1, f * 2 + 1)); erode(src, dst2,element1); imshow("腐蚀图", dst2); } int main() { double time0 = static_cast (getTickCount());//记录起始时间 namedWindow("原图", WINDOW_FREERATIO); namedWindow("膨胀图"); namedWindow("腐蚀图"); imshow("原图", src); //膨胀 createTrackbar("内核值", "膨胀图", &p, 20, on_p); on_p(p, 0); //腐蚀 createTrackbar("内核值", "腐蚀图", &f, 20, on_f); on_f(f, 0); time0 = ((double)getTickCount() - time0) / getTickFrequency(); cout << "此方法运行时间:" << time0 << "秒" << endl;//输出运行时间 waitKey(0); return 0; }
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)