CreateStructuringElementEx

生活百科 2023-01-25 19:31生活百科www.aizhengw.cn

CreateStructuringElementEx

CreateStructuringElementExIplConvKernel cvCreateStructuringElementEx( int cols, int rows, int anchor_x, int anchor_y,

int shape, int values=NULL );

基本介绍

  • 中文名创建结构元素
  • 外文名CreateStructuringElementEx
  • cols结构元素的列数目
  • rows结构元素的行数目

简介

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, 它可作为形态操作中的结构元素。举个例子比较好说清楚
比如一个图
00000
01110
00000
用一个cvCreateStructuringElementEx( 3,1,0 0,CV_SHAPE_RECT)的元素来腐蚀,则结果为
00000
01000
00000
理解cvCreateStructuringElementEx( 3,1,0 0,CV_SHAPE_RECT)中的3,1表示要腐蚀的对象是一个3列1行的矩阵,即结构元素为[1(anchor),1,1],如果该矩阵里元素全为非零,则将其转化为同样大小只包含一个非零元素,而该非零元素的位置是(0,0),即锚点位置,效果上讲,可以看做是对图像从y方向上进行截断。同理cvCreateStructuringElementEx( 3,1,1 0,CV_SHAPE_RECT)中的3,1表示要腐蚀的对象是一个3列1行的矩阵。
假如用下面这个去腐蚀图像,中心是在右下角1 0 01 1 01 1 1 那幺应该怎幺表示呢?
理论上应该是int mask[9] = {1, 0, 0, 1, 1, 0, 1, 1, 1}; IplConvKernel strel = cvCreateStructuringElementEx( 3, 3, 0, 2, CV_SHAPE_CUSTOM, mask );其中0,2可按自己要求设定。
结构元素的不同设定对于处理结果有着重要影响,当需要对y方向进行腐蚀操作时,同理,可如下操作。
比如一个图
01000
01000
01000
而用了一个cvCreateStructuringElementEx( 1,3,1 0,CV_SHAPE_RECT)的元素来腐蚀,则结果为
00000
01000
00000

理解

此时创建的结构元素为1x3的列矩阵,即[1,1(anchor),1]的转置矩阵,如右图 所示,锚点位置在第二行一列处,即(1,0),具体处理的思路同上所述。图像处理的效果是从x方向上进行了截断,一定程度上剔除该方向的毛刺。

Copyright@2015-2025 www.aizhengw.cn 癌症网版板所有