opencv学习—形态学

void cvDilate( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 );

void cvErode( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 );

src             输入图像.
dst            输出图像.
element    用于膨胀的结构元素。若为 NULL, 则使用 3×3 长方形的结构元素
iterations   膨胀的次数

cvErode()腐蚀后cvDilate()膨胀,叫作开操作,那些离散点或游丝线、毛刺就被过滤

cvDilate()膨胀后cvErode()腐蚀,叫作闭操作,那些断裂处就被缝合。

  在OpenCV中某些高级形态学变换用cvMorphologyEx函数完成,包括开运算,闭运算,标准形态梯度,白顶帽,黑顶帽运算。但是本博主不推荐使用该函数。

     通过查看cvMorphologyEx的源代码,可以发现,在执行开、闭等运算,在进行第二步形态学腐蚀和膨胀时,该函数仍然采用与第一步相同的结构元素进行。这种方法在针对一般对称的结构元素情况是正确的,但是当结构元素为自定义的非对称结构元素时,结果图像会发生错误的偏移。

 正确的方法是,如前面在开、闭运算的介绍中,执行第二步腐蚀、膨胀操作时,应采用结构元素的映射(反射)进行。因此,在本文中不提倡使用cvMorphologyEx函数。本文将通过一系列扩展的形态学变换函数替代该函数的功能,如:lhMorpOpen,lhMorpClose等,请参考本博客OpenCV和形态学系列文章。http://lh2078.blog.163.com

在这里仅给出该函数的简单描述。

函数:cvMorphologyEx

void cvMorphologyEx( const CvArr* src, CvArr* dst, CvArr* temp,
IplConvKernel* element, int operation, int iterations=1 );
src 
输入图像. 
dst 
输出图像. 
temp 
临时图像,某些情况下需要 
element 
结构元素 
operation 
形态操作的类型: 
CV_MOP_OPEN - 开运算 
CV_MOP_CLOSE - 闭运算 
CV_MOP_GRADIENT - 形态梯度 
CV_MOP_TOPHAT - "顶帽" 
CV_MOP_BLACKHAT - "黑帽" 
iterations 
膨胀和腐蚀次数. 
函数 cvMorphologyEx 在膨胀和腐蚀基本操作的基础上,完成一些高级的形态变换: 
开运算
dst=open(src,element)=dilate(erode(src,element),element) 
闭运算
dst=close(src,element)=erode(dilate(src,element),element) 
形态梯度 
dst=morph_grad(src,element)=dilate(src,element)-erode(src,element) 
"顶帽"
dst=tophat(src,element)=src-open(src,element) 
"黑帽"
dst=blackhat(src,element)=close(src,element)-src 
临时图像 temp 在形态梯度以及对“顶帽”和“黑帽”操作时的 in-place 模式下需要。


你可能感兴趣的:(opencv学习—形态学)