一、腐蝕和膨脹
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