圖像腐蝕和圖像膨脹是圖像中兩種最基本形態學操作。
void erode( const Mat& src, Mat& dst, const Mat& element,Point anchor=Point(-1,-1), int iterations=1,int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue() );
void dilate( const Mat& src, Mat& dst, const Mat& element,Point anchor=Point(-1,-1), int iterations=1,int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue() );
可見,腐蝕和膨脹的參數完全一樣。
參數:
src:原圖像。
dst:目標圖像。
element:腐蝕操作的內核。 如果不指定,默認為一個簡單的 矩陣。否則,我們就要明確指定它的形狀,可以使用函數getStructuringElement().
anchor:默認為Point(-1,-1),內核中心點。省略時為默認值。
iterations:腐蝕次數。省略時為默認值1。
borderType:推斷邊緣類型,具體參見borderInterpolate函數。默認為BORDER_DEFAULT,省略時為默認值。
borderValue:邊緣值,具體可參見createMorphoogyFilter函數。可省略。
通常情況下,我們可以使用函數getStructuringElement()來制作操作內核。
Mat getStructuringElement(int shape, Size esize, Point anchor=Point(-1,-1));
參數:
shape:內核形狀,主要有MORPH_RECT,MORPH_CROSS和MORPH_ELLIPSE,分別為矩形、橢圓形和交叉形,對應的值分別為0,1,2
enum { MORPH_RECT=0, MORPH_CROSS=1, MORPH_ELLIPSE=2 };
esize:內核大小。
anchor:內核錨點,默認為內核中心點。
例:
Mat element = getStructuringElement( 0,Size( 2*i + 1, 2*i+1 ), Point(i, i ) ); /// 腐蝕操作 erode( src, dst, element );
Mat element = getStructuringElement( 0,Size( 2*i + 1, 2*i+1 ), Point(i, i ) ); /// 膨脹操作 dilate( src, dst, element );
——