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() // 边界值
);
运算类型(op):
MORPH_ERODE(腐蚀操作)
该运算通过将指定结构元素(核)与图像上的每个像素进行卷积,计算结构元素(核)覆盖下的像素的最小值,并将结果写入输出图像中。
MORPH_DILATE(膨胀操作)
该运算通过将指定结构元素(核)与图像上的每个像素进行卷积,计算结构元素(核)覆盖下的像素的最大值,并将结果写入输出图像中,能够填充小的空洞。
MORPH_OPEN(开运算)
该运算先对图像进行腐蚀操作,然后再对腐蚀后的图像进行膨胀操作,能够消除小的物体和细小的噪点,并平滑图像中的物体边缘等。
MORPH_CLOSE(闭运算)
该运算先对图像进行膨胀操作,然后再对膨胀后的图像进行腐蚀操作,能够填充小的空洞和连接相邻的物体,并平滑图像中的物体边缘等。
MORPH_GRADIENT(形态学梯度)
该运算通过计算图像膨胀和图像腐蚀之差,得到输入图像中物体的边缘信息。
MORPH_TOPHAT(顶帽运算)
该运算通过将原始图像与其开运算结果之差,得到输入图像中的小细节信息,提取比周围亮的区域。
MORPH_BLACKHAT(黑帽运算)
该运算通过将闭运算结果与原始图像之差,得到输入图像中的大细节信息,提取比周围暗的区域。
MORPH_HITMISS(命中或不命中)
该运算首先定义两个结构元素B1和B2,使用B1对源图像进行腐蚀操作,得到结果图像1;使用B2对源图像的互补图进行腐蚀操作,得到结果图像2,将结果图像1和结果图像2进行逻辑与(AND)操作,得到最终的输出结果。
结构元素(核)(kernel):
形态学运算的关键因素。核可以是矩形、椭圆或十字形,指定了像素邻域的形状。常见的核使用函数 cv::getStructuringElement() 生成。核的尺寸和形状直接影响形态学运算的效果。
核的锚点(anchor):
决定形态学运算时哪个点与源图像进行对齐。默认值为 (-1, -1),表示锚点在核的中心。
边界类型(borderType):
图像边界的处理方式,决定当核处理图像边界时如何扩展边界。常见值包括:
边界的填充值(borderValue):
当 borderType 为 BORDER_CONSTANT 时,指定的常数边界值