opencv笔记 5.形态学滤波
来源:互联网 发布:java定时器 任务超时 编辑:程序博客网 时间:2024/04/30 10:22
上一篇文章介绍了空间滤波的线性和非线性滤波,这里给大家介绍形态学滤波,包括腐蚀与膨胀、开闭运算、形态学梯度和顶帽和黑帽。其中膨胀与腐蚀是的最基本的形态学操作,其余的运算都是基于腐蚀和膨胀的。
1. 膨胀(dilate):将图像与核进行卷积,求局部最大值的操作,图像变亮。
关于膨胀函数可以参考:http://docs.opencv.org/2.4/modules/imgproc/doc/filtering.html?highlight=dilate#voiddilate(InputArray src, OutputArray dst, InputArray kernel, Point anchor, intiterations, int borderType, const Scalar& borderValue)
2. 腐蚀(erode):与膨胀相反,求局部最小值,图像变暗。
关于腐蚀函数可以参考:http://docs.opencv.org/2.4/modules/imgproc/doc/filtering.html?highlight=erode#voiderode(InputArray src, OutputArray dst, InputArray kernel, Point anchor, intiterations, int borderType, const Scalar& borderValue)
3. 开运算(open operation):先对图像进行腐蚀然后进行膨胀操作。
dst=open(src,element)=dilate(erode(src,element))
4. 闭运算(close operation):先对图像进行膨胀然后进行腐蚀操作。
dst=close(src,element)= erode (dilate(src,element))
5. 形态学梯度(morphological gradient):对图像分别进行膨胀操作和腐蚀操作,然后相减。这个可以用来保留图像的边缘轮廓。
dst=dilate(src,element)-erode(src,element)
6. 顶帽(top hat):原图与开运算操作的结果图相减。
dst=src-open(src,element)
7. 黑帽(black hat):闭运算操作的结果与原图相减。
dst=close(src,element)-src
OpenCV中的morphologyEx函数,它利用基本的膨胀和腐蚀技术,来执行更加高级的形态学变换,如开闭运算,形态学梯度,“顶帽”、“黑帽”等等。
关于morphologyEx函数可以参考:http://docs.opencv.org/2.4/modules/imgproc/doc/filtering.html?highlight=morphologyex#voidmorphologyEx(InputArray src, OutputArray dst, int op, InputArray kernel, Pointanchor, int iterations, int borderType, const Scalar& borderValue)。
这里对此函数进行简单说明。这个函数一共有八个参数,后四个参数都带有默认值,所以一般可以只对前四个参数进行赋值即可。morphologyEx(src,dst,MORPH_ERODE,element); 第三个参数表示形态学运算的类型,第四个参数是形态学运算的内核,这个参数通常与getStructuringElement函数配合使用。如:
Mat element = getStructuringElement(MORPH_RECT, Size(kernel,kernel));
下面用简单的代码段对形态学滤波进行实现,观察效果。
#include<iostream>#include<cv.hpp>//#include "highgui.hpp" //#include "imgproc.hpp" using namespace std;using namespace cv;#define kernel 10int main(){Mat dst, src = imread("1.tif");//读入图片imshow("SRC",src); //显示原图Mat element = getStructuringElement(MORPH_RECT, Size(kernel, kernel));//设置内核参数//7种形态学滤波类型morphologyEx(src,dst,MORPH_ERODE,element);imshow("ERRODE", dst); //膨胀morphologyEx(src, dst, MORPH_DILATE, element);imshow("DILATE", dst); //腐蚀morphologyEx(src, dst, MORPH_OPEN, element);imshow("OPEN", dst); //开运算morphologyEx(src, dst, MORPH_CLOSE, element);imshow("CLOSE", dst); //闭运算morphologyEx(src, dst, MORPH_GRADIENT, element);imshow("GRADIENT", dst); //形态学梯度morphologyEx(src, dst, MORPH_TOPHAT, element);imshow("TOPHAT", dst); //顶帽morphologyEx(src, dst, MORPH_BLACKHAT, element);imshow("BLACKHaT", dst); //黑帽waitKey(); //等待return 0;}程序运行效果:
这里用了一幅二值图像,读者可以选用不同的图像,然后执行程序观察效果。
除此之外,下面的两篇文章对形态学滤波有更详细的讲解。
参考文献:
http://blog.csdn.net/poem_qianmo/article/details/23710721
http://blog.csdn.net/poem_qianmo/article/details/24599073
- opencv笔记 5.形态学滤波
- Opencv形态学滤波-形态学梯度
- Opencv形态学滤波-综合
- opencv 形态学滤波
- opencv学习笔记(二十)——形态学滤波
- Opencv形态学滤波-闭运算
- Opencv形态学滤波-顶帽
- Opencv形态学滤波-黑帽
- Opencv形态学滤波-开运算
- 基于opencv的形态学滤波
- OpenCV学习笔记-形态学
- opencv 高斯滤波,通用形态学
- OpenCV与EmguCV中的形态学滤波
- OpenCV 2 学习笔记(24): 使用形态学滤波检测边缘与角点
- OpenCV学习笔记(14):形态学滤波对图像进行边缘及角点检测
- 【OpenCV】笔记(7)——图像滤波和形态学变换
- opencv学习笔记第五章 使用形态学滤波对图像进行开闭运算
- opencv学习笔记之5.4使用形态学滤波进行边缘和角点检测
- C++ 希尔排序算法
- 英国政府开源了其大规模监控软件
- 什么是持久化? 为什么要持久化?
- Your build settings specify a provisioning profile with the UUID
- ListView——HolderView方式
- opencv笔记 5.形态学滤波
- python反射机制
- 基础控件之UILabel、UIButton、UITextField、UIAlertView、 UIImageView
- linux 下core文件的设置
- ARM仿真器总结
- 《python识别验证码》
- 避免App沦为“僵尸”的12个秘诀
- Elasticsearch in java 范例:自动补齐功能(completion suggester)
- Python导入自带和外部的包