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 |
形态学操作类型。 |
|
输入 |
kernel |
形态学核。 |
非空 |
输入 |
anchor |
锚点位置。 |
默认(-1,-1)表示核中心 |
输入 |
iterations |
迭代次数。 |
(1,inf) |
输入 |
borderType |
边界模式。 |
|
输入 |
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; } |