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