【OpenCV3经典编程100例】(14)形态学滤波:对灰度图像进行开运算与闭运算、morphologyEx()函数

形态学滤波:对灰度图像进行开运算与闭运算。

API函数

morphologyEx()实现形态学8种运算

        //【3】获取结构元素
	Mat element = getStructuringElement(MORPH_ELLIPSE, Size(5, 5));
	//【4】形态学8种运算
	//1.膨胀运算
	morphologyEx(image, result, MORPH_DILATE, element);
	//2.腐蚀运算
	morphologyEx(image, result, MORPH_ERODE, element);
	//3.开运算
	morphologyEx(image, result, MORPH_OPEN, element);
	//4.闭运算
	morphologyEx(image, result, MORPH_CLOSE, element);
	//5.形态学梯度
	morphologyEx(image, result, MORPH_GRADIENT, element);
	//6.顶帽
	morphologyEx(image, result, MORPH_TOPHAT, element);
	//7.黑帽
	morphologyEx(image, result, MORPH_BLACKHAT, element);
	//8.击中与否变换
	morphologyEx(image, result, MORPH_HITMISS, element);

一、c++示例代码

//包含头文件
#include <opencv2/opencv.hpp>
//命名空间
using namespace cv;
using namespace std;
//全局函数声明部分

//主函数
int main()
{
	//【1】载入图像,灰度化
	Mat image = imread("F:\\opencvtest\\testImage\\beauty.png", 0);//灰度原图
	//【2】检查是否载入成功
	if (image.empty())
	{
		printf("读取图片错误,请确认目录下是否有imread函数指定图片存在! \n ");
		return 0;
	}
	//【3】获取结构元素
	Mat element = getStructuringElement(MORPH_RECT, Size(5, 5));
	//【4】闭运算
	Mat closedImage;
	morphologyEx(image, closedImage, MORPH_CLOSE, element);
	//【5】开运算
	Mat openedImage;
	morphologyEx(image, openedImage, MORPH_OPEN, element);
	//【6】显示图像
	imshow("14-灰度图像", image);
	imshow("14-闭运算", closedImage);
	imshow("14-开运算", openedImage);
	//【7】保持窗口显示
	waitKey(0);
	return 0;
}

二、运行截图

1、灰度原图


2、闭运算


3、开运算


三、数字图像处理知识

1.开运算

扫描二维码关注公众号,回复: 1802628 查看本文章

定义:先腐蚀再膨胀,相当于先用结构元素B对A腐蚀,再对腐蚀结果用同样的结构元进行膨胀操作。

通常用于去除小的(相对于结构元素而言)亮细节,而保留总体的灰度及和大的亮的特征不变。因为开始的腐蚀操作消除小的亮细节的同时也使图像变暗,所以后面的膨胀过程用于增加图像的整个强度,但不会再引入被去除的细节。

2.闭运算

定义:先膨胀再腐蚀,相当于先用结构元B对A进行膨胀,再对膨胀结果用同样的结构元进行腐蚀操作,过程与开运算正好相反。

通常用于去除小的(相对于结构元素而言)暗细节,同时相对保留亮特征不变。因为开始的膨胀操作消除暗细节的同时也使图像变亮,所以后面的腐蚀过程使图像变暗,但不会再引入被去除的细节。


猜你喜欢

转载自blog.csdn.net/misterjiajia/article/details/80320310