一、形态学操作简介

  • 简单来说,形态学操作就是基于形状的一系列图像处理操作,通过将 结构元素 作用于输入图像来产生输出图像。(主要是基于集合论基础上的形态学数学)
  • 基本的形态学操作包括:膨胀、腐蚀、开、闭
  • 膨胀和腐蚀是图像处理中最常用的形态学操作,基本运用:
    消除噪声;
    分割独立的图像元素,连接相邻的图像元素;
    寻找图像中明显的极大值域或极小值域;

二、膨胀

  • 将原图像 A 与任意形状的内核 B(通常为正方形或圆形),进行卷积。
  • 内核 B 有一个可定义的 锚点,通常定义为内核的中心点。
  • 进行膨胀操作时,将内核 B 划过图像,将内核 B 覆盖区域的最大相素值提取,并代替锚点位置的相素。显然,这一最大化操作将会导致图像中的亮区开始”扩展” (因此有了术语膨胀 dilation )
  • 接口说明:
dilate( InputArray src, OutputArray dst, InputArray kernel,  Point anchor = Point(-1,-1), int iterations = 1)
//例:dilate(src, dst, kernel); //kernel定义下文有讲解
  • 效果示例:

三、腐蚀

  • 腐蚀在形态学操作家族里是膨胀操作的孪生姐妹。它提取的是内核覆盖下的相素最小值。
  • 进行腐蚀操作时,将内核 B 划过图像,将内核 B 覆盖区域的最小相素值提取,并代替锚点位置的相素。
  • 接口说明:
erode( InputArray src, OutputArray dst, InputArray kernel, Point anchor = Point(-1,-1), int iterations = 1)
//例:erode(src, dst, kernel); //kernel定义下文有讲解
  • 效果示例:


    四、扩展
  1. getStructuringElement() 接口说明:
Mat getStructuringElement(int shape, Size esize, Point anchor = Point(-1, -1));
  • 这个函数的第一个参数表示内核的形状,有三种形状可以选择。
    矩形:MORPH_RECT;
    交叉形:MORPH_CROSS;
    椭圆形:MORPH_ELLIPSE;
  • 第二和第三个参数分别是内核的尺寸以及锚点的位置。一般在调用erode以及dilate函数之前,先定义一个Mat类型的变量来获得getStructuringElement函数的返回值。对于锚点的位置,有默认值Point(-1,-1),表示锚点位于中心点。注意第二个参数数值为正奇数。
  • 示例:
Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));
  1. createTrackbar() 接口说明:
createTrackbar(const String& trackbarname, const String& winname,int* value, int count,TrackbarCallback onChange = 0);
// 还有个 void* userdata = 0 参数,不知道干什么的,待补充。。。
  • 参数 trackbarname:滑动空间的名称;
    参数 winname:滑动空间用于依附的图像窗口的名称;
    参数 value:初始化阈值;
    参数 count:滑动控件的刻度范围;
    参数 onChange:回调函数,格式如下:
    typedef void (CV_CDECL TrackbarCallback)(int pos, void userdata);
  • 完整代码示例:(结合腐蚀和膨胀接口)
Mat src, dst;
void onChangeTrackBar(int, void*);
char name[] = "形态学操作";
int element_size = 0;int main()
{src = imread("E:/Image/hf.png");if (src.empty()){cout << "could not load image..." << endl;return 0;}imshow("src image", src);int posTrackBar = 2;namedWindow(name, WINDOW_AUTOSIZE);createTrackbar("erode:", name, &element_size, 20, onChangeTrackBar);onChangeTrackBar(0, 0);waitKey(0);return 0;
}void onChangeTrackBar(int, void*)
{int value = 2 * element_size + 1;Mat kernel = getStructuringElement(MORPH_RECT, Size(value, value));//erode(img, dst, kernel);dilate(src, dst, kernel);imshow(name, dst);
}

结果示例:

膨胀和腐蚀 (形态学操作简介)相关推荐

  1. python图像腐蚀处理_Python图像处理之膨胀与腐蚀的操作

    引言 膨胀与腐蚀是图像处理中两种最基本的形态学操作,膨胀将目标点融合到背景中,向外部扩展,腐蚀与膨胀意义相反,消除连通的边界,使边界向内收缩.在本文中我们将了解使用内核的图像膨胀与腐蚀的基本原理. 让 ...

  2. python opencv 膨胀_OpenCV-Python:形态学操作

    importcv2importnumpy as np img= cv2.imread('j.bmp', 0) kernel= np.ones((5, 5), np.uint8) erosion= cv ...

  3. OpenCV3学习(4.3)——图像形态学(膨胀,腐蚀)

    在图像处理技术中,有一些的操作会对图像的形态发生改变,这些操作一般称之为形态学操作(phology).数学形态学是基于集合论的图像处理方法,最早出现在生物学的形态与结构中,图像处理中的形态学操作用于图 ...

  4. 图像膨胀、腐蚀算法实现 python源码

    如果您觉得本文不错!记得点赞哦! 一. 图像形态学简介: 图解图像腐蚀.膨胀 ↑ 经验之谈:形态学操作一般作用于二值图像,来连接相邻的元素(膨胀)或分离成独立的元素(侵蚀).腐蚀和膨胀是针对图片中的白 ...

  5. 膨胀与腐蚀的彻底击破

    最近很多东西都是在不断的去温习与补充,对于形态学这一块确实没咋了解,昨天花了点时间看看一些牛人的博客,还是从原理,目的,例子以及源码这一套流程来分析. 主要参考博客链接: http://blog.cs ...

  6. 形态学操作+实例分析(第六天)

    形态学概念介绍 形态学现在学完基本的几个了,但我还是不知道什么是形态学!原理其实就是和"卷积"在图像处理中的应用一样,就是一个"内核"遍历图像之后进行处理,内核 ...

  7. 【图像处理】——Python OpenCV实现形态学膨胀、腐蚀开闭操作(可以用于图像滤波、图像分割等)

    转载博客请注明详细地址,谢谢 本文讲了形态学基本操作膨胀腐蚀开闭操作的原理 本文讲解了用OpenCV-Python实现形态学操作 目录 一.形态学简述 1.简介 2.一些基本定义 3.结构元素 (1) ...

  8. OpenCV(六)形态学操作1--基础:膨胀与腐蚀(回调函数)

    目录 形态学通用API:morphologyEx 一.基础理论 1.邻接关系 (1)四邻接: (2)D邻接: (3) 八邻接: 2.连通性 (1)四连通: (2)八连通: (3)m连通: 3.形态学基 ...

  9. OpenCvSharp 形态学操作(膨胀、腐蚀)

    什么是形态学操作 用数学形态学(也称图像代数)表示以形态为基础对图像进行分析的数学工具.基本思想是用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对图像分析和识别的目的. 形态学图像处理的数 ...

最新文章

  1. Spring Cloud第六章:配置中心Config
  2. R语言使用coin包应用于独立性问题的置换检验(permutation tests)、使用普通cor.test函数和置换近似spearman_test函数、检验变量的相关性的显著性
  3. UA MATH636 信息论2 数据压缩
  4. Jquery实现自动生成二级目录
  5. python爬虫scrapy连接mongodb_爬虫框架scrapy和数据库MongoDB的结合使用(二)实战
  6. 矩池云上关于conda的一些使用技巧
  7. 网络基础知识:FTP命令及应答码
  8. 【Web技术】771- 图片懒加载从简单到复杂
  9. k2p升级显示服务器错误,k2p—b1版本刷固件遇到的问题
  10. Java开发环境安裝教程
  11. 我的电脑(ACER 4750G)升级
  12. python基础练习题:找到一个圆锥的体积。【难度:1级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
  13. Python编程之找完数
  14. 服务器打开网页图片显示红x,cacti无法显示图片,图片显红叉
  15. LLVM中的pass及其管理机制
  16. 手机通过笔记本上网~
  17. 计算机主机显卡吗,没有显卡的电脑能用吗_电脑主机没显卡能用吗-系统城
  18. Android 定时获取上下行流量数据
  19. Linux文件锁内核VFS层源码实现讲解
  20. LCD12864串行驱动程序

热门文章

  1. CentOS | 01 CentOS中文输入法调不出来
  2. 音频基础之I2S、TDM、PCM传输
  3. 结对编程项目-四则运算(第一周阶段性总结)
  4. jquery-table2excel,进行导出excel
  5. lpc54606详细介绍_LPC54606
  6. jboss jndi服务
  7. actuator对Consul的影响 consul健康检查通不过的原因之一
  8. 利用System.IO.Compression实现文件压缩和解压缩
  9. 考研日记--8.11 你懒散的时间是被白白浪费掉的
  10. 安卓中的View、SurfaceView和GLSurfaceView区别