在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/