在OpenCV中,定義了一個結構用於描述形態學中的結構元素。該結構定義如下:
typedef struct _IplConvKernel
{
int nCols;
int nRows;
int anchorX;
int anchorY;
int *values;
int nShiftR;
}
IplConvKernel;
在這裏,對其中的變量定義做一簡單的描述:
nCols,nRows:結構元素的行寬與列高;
anchorX,anchorY:結構元素原點(錨點)的位置座標,水平,垂直;
nShiftR:用於表示結構元素的形狀類型,有如下幾個值:
#define CV_SHAPE_RECT 0
#define CV_SHAPE_CROSS 1
#define CV_SHAPE_ELLIPSE 2
#define CV_SHAPE_CUSTOM 100
分別表示矩形,十字,橢圓和自定義。
values:當nShiftR爲自定義時,value是指向結構元素數據的指針,如果結構元素的大小定義爲8*6,那麼values爲48長的int數組,值爲0或1。
在OpenCV中定義了兩個關於結構元素IplConvKernel的操作,用於結構元素的創建和釋放。
cvCreateStructuringElementEx
創建結構元素
IplConvKernel* cvCreateStructuringElementEx( int cols, int rows, int anchor_x, int anchor_y,
int shape, int* values=NULL );
cols 結構元素的列數目
rows 結構元素的行數目
anchor_x 錨點的相對水平偏移量
anchor_y 錨點的相對垂直偏移量
shape 結構元素的形狀,可以是下列值:
CV_SHAPE_RECT, 長方形元素;
CV_SHAPE_CROSS, 交錯元素 a cross-shaped element;
CV_SHAPE_ELLIPSE, 橢圓元素;
CV_SHAPE_CUSTOM, 用戶自定義元素。這種情況下參數 values 定義了 mask,即象素的那個鄰域必須考慮。
values 指向結構元素的指針,它是一個平面數組,表示對元素矩陣逐行掃描。(非零點表示該點屬於結構元)。如果指針爲空,則表示平面數組中的所有元素都是非零的,即結構元是一個長方形(該參數僅僅當shape參數是 CV_SHAPE_CUSTOM 時才予以考慮)。
函數 cv CreateStructuringElementEx 分配和填充結構 IplConvKernel, 它可作爲形態操作中的結構元素。
cvReleaseStructuringElement 刪除結構元素
void cvReleaseStructuringElement( IplConvKernel** element );
element 被刪除的結構元素的指針
函數 cvReleaseStructuringElement 釋放結構 IplConvKernel 。如果 *element 爲 NULL, 則函數不作用。
其他結構元素的擴展操作參見:
http://lh2078.blog.163.com/blog/static/56811372201051891044624/