结构元素IplConvKernel及操作

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

你可能感兴趣的:(形态学图像处理)