原文:https://blog.youkuaiyun.com/qingyang8513/article/details/80675872
形态学运算
2.1 开运算
腐蚀与膨胀作为形态学的基本操作,经过组合后可以很容易的实现更高一级的形态学运算。开运算即是先腐蚀后膨胀的得到的结果,即dst = open(src, element) = dilate(erode(src, element))。开运算可以消除局部小的白色杂点,在纤细点处分离物体,并且在平滑较大物体的边界的同时不明显改变其面积。
2.2 闭运算
闭运算过程与开运算过程相反,其是先膨胀后腐蚀的过程,可以消除图像中的小黑点,dst = close(src, element) = erode(dilate(src, element))。。
2.3 形态学梯度
形态学梯度是膨胀图与腐蚀图之差,其数学表达式为:dst = morph_grad(src, element) = dilate(src, element) - erode(src, element)。对二值图像进行形态学梯度运算,可以突出物体边缘。通常,我们采用形态学梯度来保留物体的边缘轮廓。
2.4 顶帽
顶帽运算又常称为礼帽运算,是原始图像与图像开运算结果之差,其数学表达式为:dst = tophat(src, element) = src - open(src, element)。顶帽运算通常用来分离比邻近点亮一些的斑块,在一幅图像具有大幅背景且微小细节比较有规律的情况下,顶帽运算可以用来进行背景提取。
2.5 黑帽
黑帽运算是图像闭运算结果与原始图像之差,其数学表达式为:dst = tophat(src, element) = close(src, element) - src。黑帽运算通常用来分离比邻近点暗一些的斑块,可以突出比原始图轮廓周围区域更暗的区域。
OpenCV实现
cv::morphologyEx()函数综合形态学大部分运算,可以实现形态学腐蚀、膨胀、开运算、闭运算、形态学梯度、顶帽、黑帽等。cv::morphologyEx()声明如下:
void cv::morphologyEx | ( | InputArray | src, |
OutputArray | dst, | ||
int | op, | ||
InputArray | kernel, | ||
Point | anchor = Point(-1,-1) , |
||
int | iterations = 1 , |
||
int | borderType = BORDER_CONSTANT , |
||
const Scalar & | borderValue = morphologyDefaultBorderValue() |
||
) |
#include <opencv2/imgproc.hpp>
执行高级形态转换。
函数cv :: morphologyEx可以使用侵蚀和膨胀作为基本操作来执行高级形态学变换。
任何操作都可以就地完成。在多通道图像的情况下,每个通道被独立处理。
参数
SRC | 来源图片。通道数可以是任意的。深度应为CV_8U,CV_16U,CV_16S,CV_32F或CV_64F之一。 |