AI图片识别

OpenCV的morphologyEx函数
贵鬼2024-12-10发布
40 0

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):

图像边界的处理方式,决定当核处理图像边界时如何扩展边界。常见值包括:

  1. BORDER_CONSTANT: 边界填充为常数值
  2. BORDER_REPLICATE: 复制边界像素


边界的填充值(borderValue):

当 borderType 为 BORDER_CONSTANT 时,指定的常数边界值