morphologyEx

函数功能

morphologyEx是高级形态学操作函数,能够在基础的腐蚀和膨胀操作之上执行更复杂的形态学变换,如开运算、闭运算、梯度、顶帽、黑帽等。它广泛用于图像处理中的噪声去除、边缘检测和结构提取。

函数接口

1
void 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());

参数

参数名

描述

取值范围

输入/输出

src

输入图像。

非空

输入

dst

输出图像。

Mat类型

输入

op

形态学操作类型。

  • MORPH_OPEN
  • MORPH_CLOSE
  • MORPH_GRADIENT
  • MORPH_TOPHAT
  • MORPH_BLACKHAT

输入

kernel

形态学核。

非空

输入

anchor

锚点位置。

默认(-1,-1)表示核中心

输入

iterations

迭代次数。

(1,inf)

输入

borderType

边界模式。

  • BORDER_CONSTANT
  • BORDER_REPLICATE
  • BORDER_REFLECT等

输入

borderValue

用于填充边界的常数值(仅对BORDER_CONSTANT有效)。

(-inf, inf)

输入

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;

int main() {
    // 读取图像
    Mat src = imread("input.jpg", IMREAD_GRAYSCALE);
    if (src.empty()) {
        std::cerr << "无法加载图像!" << std::endl;
        return -1;
    }

    // 定义形态学核
    Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5));

    // 执行开运算(先腐蚀后膨胀)
    Mat dst;
    morphologyEx(src, dst, MORPH_OPEN, kernel);

    // 显示结果
    imshow("原始图像", src);
    imshow("处理后图像", dst);
    waitKey(0);

    return 0;
}