一、腐蚀和膨胀

1、腐蚀和膨胀的主要功能

(1)消除噪声

(2)分割出独立的图像元素,在图像中连接相邻的元素

(3)寻找图像中的极大值或者极小值区域

(4)求出图像的梯度

2、膨胀(dilate)

膨胀就是求局部最大值的操作。从数学角度来说,就是将图像与核进行卷积,计算核B覆盖区域的像素点的最大值,并把这个最大值赋值给参考点指定的元素。这样就会使图像中的高亮区域逐渐增长。

3、腐蚀(erode)

腐蚀和膨胀是相反的操作,腐蚀是求局部最小值的操作。腐蚀操作会使图像中的高亮区逐渐减小。

4、膨胀和腐蚀示例

 Mat srcImage = imread("E:\\CodeResource\\opencv\\car_pic\\car1.jpg",);

 Mat element = getStructuringElement(MORPH_RECT, Size(, ));

 Mat dilateImage;
dilate(srcImage, dilateImage, element); Mat erodeImage;
erode(srcImage, erodeImage, element); imshow("srcImage", srcImage);
imshow("dilateImage", dilateImage);
imshow("erodeImage", erodeImage); waitKey();

5、效果图:

二、开运算

1、概述

开运算是先腐蚀后膨胀。主要用于消除小物体,在纤细点处分离物体,并且在平滑较大物体的边界的同时不明显改变其面积,同时抑制比结构元小的亮细节。

2、示例

 Mat srcImage = imread("E:\\CodeResource\\opencv\\car_pic\\test1.png",);

 Mat element = getStructuringElement(MORPH_RECT, Size(,));

 Mat openImage;
morphologyEx(srcImage, openImage, MORPH_OPEN, element); imshow("srcImage", srcImage);
imshow("openImage", openImage); waitKey();

3、效果图

三、闭运算

1、概述

闭运算是先膨胀后腐蚀。用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积,同时抑制比结构元小的暗细节。

2、示例

 Mat srcImage = imread("E:\\CodeResource\\opencv\\car_pic\\test2.png",);

 Mat element = getStructuringElement(MORPH_RECT, Size(,));

 Mat closeImage;
morphologyEx(srcImage, closeImage, MORPH_CLOSE, element); imshow("srcImage", srcImage);
imshow("closeImage", closeImage); waitKey();

3、效果图

四、形态学梯度

1、概述

就是将膨胀土和腐蚀图相减。对二值化图像进行这一操作可以将边缘突出来,可以使用形态学梯度来保留物体的边缘轮廓

2、示例

 Mat srcImage = imread("E:\\CodeResource\\opencv\\car_pic\\test2.png",);

 Mat element = getStructuringElement(MORPH_RECT, Size(,));

 Mat gradientImage;
morphologyEx(srcImage, gradientImage, MORPH_GRADIENT, element); imshow("srcImage", srcImage);
imshow("gradientImage", gradientImage); waitKey();

3、效果图

五、顶帽变换和黑帽变换

1、概述

顶帽变换就是用源图像减去开运算图像。因为开运算带来的结果是放大了裂缝或者局部低亮度的区域。因此,从原图中减去开运算后的图,得到的效果图突出了比原图轮廓周围区域更明亮的区域。顶帽一般用于校正不均匀光照的影响(补充:均匀光照在从背景中提取目标的处理中扮演核心的角色)。

黑帽变换就是用闭运算减去源图像。黑帽运算后的效果图突出了比原图轮廓周围的区域更暗的区域。黑帽运算一般用来分离比邻近点暗一些的斑块。

2、示例

 Mat srcImage = imread("E:\\CodeResource\\opencv\\car_pic\\test2.png",);

 Mat element = getStructuringElement(MORPH_RECT, Size(,));

 Mat tophatImage;
morphologyEx(srcImage, tophatImage, MORPH_TOPHAT, element); Mat blackhatImage;
morphologyEx(srcImage, blackhatImage, MORPH_BLACKHAT, element); imshow("srcImage", srcImage);
imshow("tophatImage", tophatImage);
imshow("blackhatImage", blackhatImage); waitKey();

3、效果图

参考:http://blog.csdn.net/hx1298234467/article/details/49887925

OpenCV3编程入门读书笔记4-形态学滤波的更多相关文章

  1. OpenCV3编程入门读书笔记5-边缘检测

    一.边缘检测的一般步骤 1.滤波 边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感,因此必须采用滤波器来改善与噪声有关的边缘检测器的性能. 2.增强 增强边缘的基础是确定图像各 ...

  2. OpenCV3编程入门-读书笔记3-滤波

    一.领域滤波(卷积) 邻域算子值利用给定像素周围像素的值决定此像素的最终输出.如图左边图像与中间图像卷积得到右边图像.目标图像中绿色的像素由原图像中蓝色标记的像素计算得到. 通用线性邻域滤波是一种常用 ...

  3. OpenCV3编程入门-读书笔记2-core组件

    一.颜色空间缩减 1.概念 如果图像是3通道,深度为1个字节,则每个像素有256*256*256种可能值,这么多的可能值会对算法性能造成严重影响.利用颜色空间缩减就能解决这个问题,例如将颜色值0~9取 ...

  4. OpenCV3编程入门-读书笔记1

    一.OpenCV概述 1.OpenCV全程Open Source Computer Vision Library,即开源计算机视觉库.它是一个跨平台的开源计算机视觉库,可以运行在windows.lin ...

  5. opencv3 编程入门学习笔记(一): 基本函数介绍

    滤波 blur (均值滤波) 均值滤波是典型的线性滤波算法, 主要方法为领域平均法(即用一片图像区域的各个像素的平均值来代替原图像中的各个像素值) 缺点: 不能很好的保护图像细节, 在图像去噪的同时也 ...

  6. 【浅墨著作】《OpenCV3编程入门》内容简单介绍&勘误&配套源码下载

    经过近一年的沉淀和总结,<OpenCV3编程入门>一书最终和大家见面了. 近期有为数不少的小伙伴们发邮件给浅墨建议最好在博客里面贴出这本书的文件夹,方便大家更好的了解这本书的内容.事实上近 ...

  7. OpenCV3编程入门.记录

    ZC:OpenCV3编程入门_毛星云编著_电子工业出版.pdf 1.在看到 PDF.P134(计算数组加权和:addWeighted()函数)的时候,其中讲到“当输出数组的深度为CV_32S时,这个函 ...

  8. 《C#高级编程》读书笔记

    <C#高级编程>读书笔记 C#类型的取值范围 名称 CTS类型 说明 范围 sbyte System.SByte 8位有符号的整数 -128~127(−27−27~27−127−1) sh ...

  9. 第三章 Git的入门 - 读书笔记

    Android驱动月考3 第三章 Git的入门 - 读书笔记 对于Github,这是全世界最大的开源平台,你可以把你做的项目在这里开源,把你发现的一些新技术在这里开源,向全世界的开发者们分享,大家都彼 ...

随机推荐

  1. 极光推送JAVA代码示例

    一. 准备工作 1. 登录极光推送官网https://www.jpush.cn/,注册账号并登录 2. 创建应用 创建应用过程,详见百度经验:http://jingyan.baidu.com/arti ...

  2. HTML60秒倒计时

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 一人撸PaaS之“应用”

    [什么是“应用”] 应用,如果按名词理解就是类似于可以使用的功能,比如一个App应用.事实上,一个应用包含了大量的交互功能以丰富我们的日常学习和生活. 我们这里的应用指的是一系列功能的集合,可以理解为 ...

  4. iview 无法缓存的问题

  5. mybatis 配置文件全解

    目录 properties settings typeAliases mappers properties mybatis配置文件中,可以像代码一样定义变量,然后在配置文件的其他地方使用,比如数据库连 ...

  6. 转 vue实现双向数据绑定之原理及实现篇

    转自:https://www.cnblogs.com/canfoo/p/6891868.html vue的双向绑定原理及实现 前言 先上个成果图来吸引各位: 代码:                  ...

  7. spark-MLlib之线性回归

    >>提君博客原创  http://www.cnblogs.com/tijun/  << 假定线性拟合方程: 提君博客原创 变量 Xi 是 i 个变量或者说属性  参数 ai 是 ...

  8. T66099 小xzy的数对 题解

    T66099 小xzy的数对 题目背景 老师带同学参加表演,要求学生两两一组表演,但有些学生一起会发生冲突,现在老师想知道有多少组学生分到一起时不会发生冲突. 题目描述 学生发生冲突当且仅当他们身上的 ...

  9. Python 使用 matplotlib绘制3D图形

    3D图形在数据分析.数据建模.图形和图像处理等领域中都有着广泛的应用,下面将给大家介绍一下如何在Python中使用 matplotlib进行3D图形的绘制,包括3D散点.3D表面.3D轮廓.3D直线( ...

  10. Tensorflow集成接口TensorLayer、Keras

    https://www.zhihu.com/question/50030898 https://zhuanlan.zhihu.com/p/25296966 https://www.jiqizhixin ...