---
title: morphologyEx
description: "morphologyEx是高级形态学操作函数，能够在基础的腐蚀和膨胀操作之上执行更复杂的形态学变换，如开运算、闭运算、梯度、顶帽、黑帽等。它广泛用于图像处理中的噪声去除、边缘检测和结构提取。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/251RC1/accel/kunpengaccel_kpcv_06_0039.html
sourcePath: /source/zh/kunpengboostkithistory/251RC1/accel/kunpengaccel_kpcv_06_0039.html
indexId: c19bd133fe8aa94a378e2cdf17a29977a8b6958e502ea3e517e85e1410f1318377
---
# morphologyEx

#### 函数功能

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


#### 函数接口

```
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) | 输入 |


#### 示例

```
#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;
}
```
