📜  开幕| C ++中OpenCV的形态转换(1)

📅  最后修改于: 2023-12-03 15:09:48.276000             🧑  作者: Mango

开幕 | C++ 中 OpenCV 的形态转换

概述

在计算机视觉中,形态学转换是一种常见的图像处理技术,常常用于去除噪声、分离图像中的对象、填充空洞等。本文将介绍如何在 C++ 中使用 OpenCV 库进行形态学转换。

前置知识

在阅读本文之前,你需要掌握以下知识:

  • C++ 基础语法
  • OpenCV 库的安装和配置
  • 图像的读取与显示
  • 基本的图像操作(如图像二值化、掩模操作等)
形态学转换的基本概念

形态学转换的基本概念包括结构元素、膨胀、腐蚀、开运算和闭运算。

结构元素

结构元素可以看作是一个模板,用于描述形态学操作的形状和大小。通常情况下,结构元素被定义为矩形或椭圆形。

在 OpenCV 中,结构元素可以通过 getStructuringElement() 函数生成。该函数的参数包括结构元素形状、大小和锚点位置等。

cv::Mat structuringElement = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3), cv::Point(-1, -1));

上述代码创建了一个矩形形状的结构元素,大小为 $3\times3$。

膨胀

膨胀操作可以将图像中的对象扩大。通常情况下,膨胀操作可以用于填充空洞和连通对象。

在 OpenCV 中,可以使用 dilate() 函数进行膨胀操作。该函数的参数包括输入图像、输出图像和结构元素等。

cv::Mat inputImage = cv::imread("input.png", cv::IMREAD_GRAYSCALE);
cv::Mat outputImage;
cv::Mat structuringElement = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3), cv::Point(-1, -1));
cv::dilate(inputImage, outputImage, structuringElement);

上述代码读取了一张灰度图像,并对其进行了膨胀操作。

腐蚀

腐蚀操作可以将图像中的对象缩小。通常情况下,腐蚀操作可以用于去除噪声和分离对象。

在 OpenCV 中,可以使用 erode() 函数进行腐蚀操作。该函数的参数和 dilate() 函数相同。

cv::Mat inputImage = cv::imread("input.png", cv::IMREAD_GRAYSCALE);
cv::Mat outputImage;
cv::Mat structuringElement = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3), cv::Point(-1, -1));
cv::erode(inputImage, outputImage, structuringElement);

上述代码读取了一张灰度图像,并对其进行了腐蚀操作。

开运算

开运算可以先进行腐蚀操作,再进行膨胀操作。通常情况下,开运算可以用于去除小的对象和细小的连通区域。

在 OpenCV 中,可以使用 morphologyEx() 函数进行开运算操作。该函数的参数包括输入图像、输出图像、操作类型、结构元素和迭代次数等。

cv::Mat inputImage = cv::imread("input.png", cv::IMREAD_GRAYSCALE);
cv::Mat outputImage;
cv::Mat structuringElement = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3), cv::Point(-1, -1));
cv::morphologyEx(inputImage, outputImage, cv::MORPH_OPEN, structuringElement);

上述代码读取了一张灰度图像,并对其进行了开运算操作。

闭运算

闭运算可以先进行膨胀操作,再进行腐蚀操作。通常情况下,闭运算可以用于填充小的空洞和孔隙。

在 OpenCV 中,可以使用 morphologyEx() 函数进行闭运算操作。该函数的参数和开运算操作相同。

cv::Mat inputImage = cv::imread("input.png", cv::IMREAD_GRAYSCALE);
cv::Mat outputImage;
cv::Mat structuringElement = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3), cv::Point(-1, -1));
cv::morphologyEx(inputImage, outputImage, cv::MORPH_CLOSE, structuringElement);

上述代码读取了一张灰度图像,并对其进行了闭运算操作。

总结

本文介绍了 C++ 中 OpenCV 库的形态学转换操作,包括结构元素、膨胀、腐蚀、开运算和闭运算等。希望本文的内容对你有所帮助。