【OpenCV(C++)】图像处理:形态学滤波

形态学(morphology)

图像处理中的形态学指的是数学形态学(Mathmatical morphology),它是一门建立在格论和拓扑学基础之上的图像分析学科。形态学操作就是基于形状的一系列图像处理操作。

膨胀与腐蚀

膨胀(dilate)与腐蚀(erode)是最基本的形态学操作,能实现多种多样的功能:

  • 消除噪声
  • 分割出独立的图像元素,在图像中连接相邻的元素
  • 寻找图像中明显的极大值区域或极小值区域
  • 求出图像的梯度

注:腐蚀和膨胀是对高亮部分而言的

膨胀

膨胀是求局部最大值的操作。
在这里插入图片描述
dilate函数使用像素邻域内的局部极大运算符来膨胀一张图片。

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>

using namespace cv;
using namespace std;

int main()
{
	Mat srcImage = imread("fg.jpg");
	namedWindow("【原图】膨胀操作");
	namedWindow("【处理图】膨胀操作");
	imshow("【原图】膨胀操作", srcImage);

	Mat element = getStructuringElement(MORPH_BLACKHAT, Size(100, 100));
		
	Mat dstImage;

	dilate(srcImage, dstImage, element);

	imshow("【处理图】膨胀操作", dstImage);
	waitKey(0);

	return 0;
}

运行效果如下:
在这里插入图片描述

腐蚀

腐蚀是求局部最小值的操作。
在这里插入图片描述
erode函数使用像素邻域内的局部极小运算符来腐蚀一张图片。

erode(g_srcImage, g_dstImage, element);

在这里插入图片描述

其它形态学滤波

开运算(Opening Operation)

开运算即先腐蚀后膨胀的过程。可以用来消除小物体,在纤细点处分离物体,并且在平滑较大物体的边界的同时不明显改变其面积。
在这里插入图片描述

闭运算(Closing Operation)

闭运算即先膨胀后腐蚀的过程。能够排除小型黑洞(黑色区域)。
在这里插入图片描述

形态学梯度(Morphological Gradient)

即膨胀图与腐蚀图之差。对二值图像进行这一操作可以将blob的边缘突出出来。

顶帽(Top Hat)

即原图与开运算之差,突出比原图轮廓周围更明亮的区域。
在这里插入图片描述

黑帽(Black Hat)

即原图与闭运算之差,突出比原图轮廓周围更暗的区域。
在这里插入图片描述

element

下面分别为使用十字形、矩形、椭圆作为元素element的运行效果:

  • 十字形
    在这里插入图片描述
  • 矩形
    在这里插入图片描述
  • 椭圆
    在这里插入图片描述
发布了28 篇原创文章 · 获赞 20 · 访问量 3766

猜你喜欢

转载自blog.csdn.net/weixin_43645790/article/details/104088352