opencv 形态学 腐蚀 膨胀(参考了百度百科上的解释)

本文详细介绍了OpenCV中结构元素的创建方法及其在图像处理中的应用。通过具体实例讲解了如何利用cvCreateStructuringElementEx函数自定义结构元素,并演示了不同形状和尺寸的结构元素对图像腐蚀操作的影响。

    结构元素的不同设定对于处理结果有着重要影响,有时候我们需要保留图像中复合特定规律的像素,那么就需要自己设定结构元素的模型了。这里通过简单的例子,说明一下opencv的结构元素的作用。

首先解释下,opencv自带的创建结构元素的函数

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,交错元素 across-shaped element;

CV_SHAPE_ELLIPSE,椭圆元素;

CV_SHAPE_CUSTOM,用户自定义元素。这种情况下参数values定义了mask,即象素的那个邻域必须考虑。

values

指向结构元素的指针,它是一个平面数组,表示对元素矩阵逐行扫描。(非零点表示该点属于结构元)。如果指针为空,则表示平面数组中的所有元素都是非零的,即结构元是一个长方形(该参数仅仅当shape参数是CV_SHAPE_CUSTOM时才予以考虑)

函数 cv CreateStructuringElementEx分配和填充结构IplConvKernel,它可作为形态操作中的结构元素。举个例子比较好说清楚

比如一个图,效果上讲,目标是对图像从y方向上进行截断,剔除多余毛刺。

00000

01110

00000

用一个cvCreateStructuringElementEx(3,1,0 0,CV_SHAPE_RECT)的元素来腐蚀,则结果为

00000

01000

00000

而用一个cvCreateStructuringElementEx(3,1,1 0,CV_SHAPE_RECT)的元素来腐蚀,则结果为

00000

00100

00000

理解:cvCreateStructuringElementEx(3,1,0 0,CV_SHAPE_RECT)中的31表示要腐蚀的对象是一个31行的矩阵,即结构元素为[1(anchor),1,1],如果该矩阵里元素全为非零,则将其转化为同样大小只包含一个非零元素,而该非零元素的位置是(00),即锚点位置。同理cvCreateStructuringElementEx(3,1,1 0,CV_SHAPE_RECT)创建了相同的结构元素,但将锚点位置修改为10)。

假如用下面这个去腐蚀图像,中心是在右下角10 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 );其中02可按自己要求设置。

当需要对y方向进行腐蚀操作时,同理,可如下操作。

比如一个图

01000

01000

01000

用一个cvCreateStructuringElementEx(1,3,1 0,CV_SHAPE_RECT)的元素来腐蚀,则结果为

00000

01000

00000

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值