一、腐蚀和膨胀
1、腐蚀和膨胀的主要功能
(1)消除噪声
(2)分割出独立的图像元素,在图像中连接相邻的元素
(3)寻找图像中的极大值或者极小值区域
(4)求出图像的梯度
2、膨胀(dilate)
膨胀就是求局部最大值的操作。从数学角度来说,就是将图像与核进行卷积,计算核B覆盖区域的像素点的最大值,并把这个最大值赋值给参考点指定的元素。这样就会使图像中的高亮区域逐渐增长。
3、腐蚀(erode)
腐蚀和膨胀是相反的操作,腐蚀是求局部最小值的操作。腐蚀操作会使图像中的高亮区逐渐减小。
4、膨胀和腐蚀示例
1 Mat srcImage = imread("E:\\CodeResource\\opencv\\car_pic\\car1.jpg",0);
2
3 Mat element = getStructuringElement(MORPH_RECT, Size(5, 5));
4
5 Mat dilateImage;
6 dilate(srcImage, dilateImage, element);
7
8 Mat erodeImage;
9 erode(srcImage, erodeImage, element);
10
11 imshow("srcImage", srcImage);
12 imshow("dilateImage", dilateImage);
13 imshow("erodeImage", erodeImage);
14
15 waitKey(0);
5、效果图:
二、开运算
1、概述
开运算是先腐蚀后膨胀。主要用于消除小物体,在纤细点处分离物体,并且在平滑较大物体的边界的同时不明显改变其面积,同时抑制比结构元小的亮细节。
2、示例
1 Mat srcImage = imread("E:\\CodeResource\\opencv\\car_pic\\test1.png",0);
2
3 Mat element = getStructuringElement(MORPH_RECT, Size(5,5));
4
5 Mat openImage;
6 morphologyEx(srcImage, openImage, MORPH_OPEN, element);
7
8 imshow("srcImage", srcImage);
9 imshow("openImage", openImage);
10
11 waitKey(0);
3、效果图
三、闭运算
1、概述
闭运算是先膨胀后腐蚀。用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积,同时抑制比结构元小的暗细节。
2、示例
1 Mat srcImage = imread("E:\\CodeResource\\opencv\\car_pic\\test2.png",0);
2
3 Mat element = getStructuringElement(MORPH_RECT, Size(5,5));
4
5 Mat closeImage;
6 morphologyEx(srcImage, closeImage, MORPH_CLOSE, element);
7
8 imshow("srcImage", srcImage);
9 imshow("closeImage", closeImage);
10
11 waitKey(0);
3、效果图
四、形态学梯度
1、概述
就是将膨胀土和腐蚀图相减。对二值化图像进行这一操作可以将边缘突出来,可以使用形态学梯度来保留物体的边缘轮廓
2、示例
1 Mat srcImage = imread("E:\\CodeResource\\opencv\\car_pic\\test2.png",0);
2
3 Mat element = getStructuringElement(MORPH_RECT, Size(2,2));
4
5 Mat gradientImage;
6 morphologyEx(srcImage, gradientImage, MORPH_GRADIENT, element);
7
8 imshow("srcImage", srcImage);
9 imshow("gradientImage", gradientImage);
10
11 waitKey(0);
3、效果图
五、顶帽变换和黑帽变换
1、概述
顶帽变换就是用源图像减去开运算图像。因为开运算带来的结果是放大了裂缝或者局部低亮度的区域。因此,从原图中减去开运算后的图,得到的效果图突出了比原图轮廓周围区域更明亮的区域。顶帽一般用于校正不均匀光照的影响(补充:均匀光照在从背景中提取目标的处理中扮演核心的角色)。
黑帽变换就是用闭运算减去源图像。黑帽运算后的效果图突出了比原图轮廓周围的区域更暗的区域。黑帽运算一般用来分离比邻近点暗一些的斑块。
2、示例
1 Mat srcImage = imread("E:\\CodeResource\\opencv\\car_pic\\test2.png",0);
2
3 Mat element = getStructuringElement(MORPH_RECT, Size(15,15));
4
5 Mat tophatImage;
6 morphologyEx(srcImage, tophatImage, MORPH_TOPHAT, element);
7
8 Mat blackhatImage;
9 morphologyEx(srcImage, blackhatImage, MORPH_BLACKHAT, element);
10
11 imshow("srcImage", srcImage);
12 imshow("tophatImage", tophatImage);
13 imshow("blackhatImage", blackhatImage);
14
15 waitKey(0);
3、效果图
参考:http://blog.csdn.net/hx1298234467/article/details/49887925