1. 程式人生 > >Opencv學習筆記-膨脹和腐蝕

Opencv學習筆記-膨脹和腐蝕

1.影象的膨脹和腐蝕是影象形態學處理的兩種操作。形態學一詞通常指生物學的一個分支,它用於處理動物和植物的形狀和結構。數字影象處理中的形態學處理是指將數字形態學作為工具從圖像中提取對於表達和描繪區域形狀有用處的影象分量,比如邊界、骨架以及凸殼,還包括用於預處理或後處理的形態學過濾、細化和修剪等。

2.膨脹和腐蝕原理的簡單描述:膨脹是對畫素的一個區域性區域求取最大值,然後把這個最大值賦值給該區域的一個參考點。而又知道畫素點的值閾值越大,體現該處越亮。進而可以知道,膨脹的操作使得影象中高亮的部分越來越大。即圖片的高亮部分產生“膨脹”的效果。相反,影象的腐蝕操作就是膨脹的逆運算,即為求取區域性最小值,然後賦值參考點。最終達到高亮部分越來越小。即對高亮部分有”腐蝕“作用。

3.膨脹和腐蝕主要功能:

  1. 去除噪聲。這個作用在二值圖的膨脹腐蝕操作中比較明顯
  2. 連結或者分隔一些相鄰的區域
  3. 求取最大或最小的區域
    #include<iostream>
    #include <opencv2/opencv.hpp> 
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    using namespace std;
    using namespace cv;
    
    
    int main()
    {
    	
    	Mat srcImage = imread("haoming.jpg");
    	if (srcImage.empty())
    	{
    		return -1;//檢查是否載入成功
    	}
    	imshow("srcImage",srcImage);
    	waitKey(0);
    
    	Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));//獲取一個結構元素
    	Mat resImage_erode;
    	Mat resImage_dilate;
    
    	erode(srcImage, resImage_erode, element);//進行腐蝕操作
    	dilate(srcImage, resImage_dilate,element);//進行膨脹操作
    
    	imshow("resImage-腐蝕",resImage_erode);
    	waitKey(0);
    	imshow("resIamge-膨脹",resImage_dilate);
    	waitKey(0);
    
    	return 0;
    }

getStructuringElement():

函式原型:CV_EXPORTS_W Mat getStructuringElement(int shape, Size ksize, Point anchor=Point(-1,-1));該函式可以獲取常用的結構元素的形狀:矩形(包括線形)、橢圓(包括圓形)及十字形。 MORPH_RECT, MORPH_ELLIPSE, MORPH_CROSS

用該函式作用是獲取膨脹腐蝕操作的區域和參考點。

erode():

CV_EXPORTS_W void erode( InputArray src, OutputArray dst, InputArray kernel,
                         Point anchor=Point(-1,-1), int iterations=1,
                         int borderType=BORDER_CONSTANT,
                         const Scalar& borderValue=morphologyDefaultBorderValue() );

src:原影象。

dst:目標影象。

element:腐蝕操作的核心。 如果不指定,預設為一個簡單的3x3 矩陣。否則,我們就要明確指定它的形狀,可以使用函式getStructuringElement().

anchor:預設為Point(-1,-1),核心中心點,即操作的參考點省略時為預設值。即操作的參考點

iterations:腐蝕次數。省略時為預設值1。

borderType:推斷邊緣型別,具體參見borderInterpolate函式。預設為BORDER_DEFAULT,省略時為預設值。

borderValue:邊緣值,具體可參見createMorphoogyFilter函式。

dilate()函式幾乎與erode()一致。

測試效果:




與原圖相比較,可以看出,腐蝕的效果是高亮部分減少,膨脹的效果是高亮的部分增多。