形态学滤波:对灰度图像进行开运算与闭运算。
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进行膨胀,再对膨胀结果用同样的结构元进行腐蚀操作,过程与开运算正好相反。
通常用于去除小的(相对于结构元素而言)暗细节,同时相对保留亮特征不变。因为开始的膨胀操作消除暗细节的同时也使图像变亮,所以后面的腐蚀过程使图像变暗,但不会再引入被去除的细节。