腐蚀,膨胀,opencv的形态学处理

本文介绍了图像处理中的腐蚀和膨胀操作,并详细解释了如何使用OpenCV库中的cvErode和cvDilate函数实现这两种操作。此外,还介绍了如何通过cvCreateStructuringElementEx创建结构元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于腐蚀和膨胀,看过很多理论,但是至今还是比较模糊,我的理论是模糊的话,那就不要在头痛了,记住它的用法吧,我确信我不能在这个上面研究出什么新的算法了,会用就行。

自己的理解:假设图像A和核元素B,不管B是什么形状,都会有一个参考中心Bo

腐蚀:用B在A上移动,B结构下的A最小的亮度值作为Bo对应的像素点的亮度值;

膨胀:把“小”字改为“大”字;

OPENCv里的函数:

cvErode

void cvErode( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 );
src
输入图像.
dst
输出图像.
element
用于腐蚀的结构元素。若为 NULL, 则使用 3×3 长方形的结构元素
iterations
腐蚀的次数
函数 cvErode 对输入 图像使用指定的结构元素进行腐蚀,该结构元素决定每个具有最小值象素点的邻域形状:
dst=erode(src,element): dst(x,y)=min((x',y') in element))src(x+x',y+y')
函数可以是本地操作,不需另外开辟 存储空间的意思。腐蚀可以重复进行 (iterations) 次. 对彩色图像,每个彩色通道单独处理。

CreateStructuringElementEx  创建结构元素;ReleaseStructuringElement 删除结构元素。


cvDilate

函数名:cvDilate
void cvDilate( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 );
src
输入图像.
dst
输出图像.
element
结构元素。若为 NULL, 则使用默认的3×3 长方形,锚点在中间的结构元素,进行膨胀运算
iterations
膨胀的次数
函数 cvDilate 对输入 图像使用指定的结构元进行膨胀,该结构决定每个具有最大值象素点的邻域形状。
说明:
使用任意结构元素膨胀 图像,函数在调用中可以在输入图像上直接进行操作,如采用如下方式调用:cvDilate (img1, img1);
膨胀可以重复进行 (iterations) 次. 对彩色图像,每个彩色通道单独处理。

当IplConvKernel* element不为NULL时,我们创建核,创建核时,又可以自己定义,还可以进行选择;自己定义就要给出一个数组,让int *value指向;
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 时才予以考虑)。 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值