一、结构元素和锚点
数学形态学中最基本的概念是结构元素。结构元素可以简单地定义为像素的组合(下图的黄色正方形),在对应的像素上定义了一个原点(也称锚点)。
二、图像腐蚀和膨胀
1、腐蚀
腐蚀就是把当前像素替换成所定义像素集合中的最小像素值,如图对左上角9个像素点进行腐蚀,以1号像素点为锚点,结构元素为1、2、4、5号,最小值为5号(像素值4),所以替换后像素值4;以5号像素点为锚点,结构元素为1、2、3、4、5、6、7、8、9号,最小像素点是6号(像素值1),所以腐蚀后像素值为1。以此类推,对所有像素点像素值替换。
2、膨胀
膨胀是腐蚀的反运算,它把当前像素替换成所定义像素集合中的最大像素值。原理可参考腐蚀。
三、程序实现
OpenCV用简单的函数实现了腐蚀和膨胀运算,它们分别是 cv:erode 和 cv:dilate,用法也很简单。
#include <QtCore/QCoreApplication>
#include <opencv2/opencv.hpp>
#include <iostream>
int main(int argc, char* argv[]) {
cv::Mat srcImage;
srcImage = cv::imread("E:/image/P2.bmp", cv::IMREAD_GRAYSCALE); // 读取输入图像
cv::namedWindow("srcImage"); // 定义窗口
cv::imshow("srcImage", srcImage); // 显示图像
// 腐蚀图像
// 采用的 3×3 结构元素
cv::Mat eroded; // 目标图像
cv::erode(srcImage, eroded, cv::Mat());
cv::namedWindow("eroded");
cv::imshow("eroded", eroded);
// 膨胀图像
cv::Mat dilated; // 目标图像
cv::dilate(srcImage, dilated, cv::Mat());
cv::namedWindow("dilated");
cv::imshow("dilated", dilated);
QCoreApplication a(argc, argv);
return a.exec();
}