前言

  膨胀就是对图中的每个像素取其核范围内最大的那个值,腐蚀就相反。这两个操作常用来突出显示图的某个高亮部分或者昏暗部分以及去噪。本文展示两个分别对图像进行膨胀和腐蚀的例子。

膨胀和腐蚀函数 cvErode() 和 cvDilate()

  函数原型:

  1. // 膨胀函数
  2. void cvcvDilate (
  3. IplImage *src,       // 待处理图像
  4. IplImage dst,        // 处理后图像
  5. IplConvKernel * B = NULL, // 自定义卷积核
  6. int iterations =    // 是否进行迭代
  7. );
  8.  
  9. // 腐蚀函数
  10. void cvErode (
  11. IplImage *src,       // 待处理图像
  12. IplImage dst,       // 处理后图像
  13. IplConvKernel * B = NULL, // 自定义卷积核
  14. int iterations =    // 是否进行迭代
  15. );

  一般来说,后面两个参数用的不多,就用它的默认参数好了。

代码示例 - 膨胀

  1. // 此头文件包含图像IO函数的声明
  2. #include "highgui.h"
  3. // 此头文件包含基本的图像处理函数和高级计算机视觉算法
  4. #include "cv.h"
  5.  
  6. int main (void) {
  7.  
  8. // 将D盘目录下名为" 1.jpg "的图像加载至内存并获得一个指向该图像内存块的指针img
  9. IplImage * img = cvLoadImage ("D:\\1.jpg");
  10.  
  11. // 创建一个窗口显示处理前的图像
  12. cvNamedWindow ("膨胀前", CV_WINDOW_AUTOSIZE);
  13.  
  14. // 将图像装载进窗口并显示此窗口
  15. cvShowImage ("膨胀前", img);
  16.  
  17. // 创建一个新的图像内存块,以存放处理后的结果。
  18. IplImage * out = cvCreateImage (
  19. cvGetSize (img),
  20. img->depth,
  21. img->nChannels
  22. );
  23.  
  24. // 膨胀函数
  25. cvDilate (
  26. img,   // 输入图像
  27. out // 输出图像
  28. );
  29.  
  30. // 创建一个窗口显示处理后的图像
  31. cvNamedWindow ("膨胀后", CV_WINDOW_AUTOSIZE);
  32.  
  33. // 将图像装载进窗口并显示此窗口
  34. cvShowImage ("膨胀后", out);
  35.  
  36. // 该函数的参数为 0 时,程序将等待用户触发一个按键操作。
  37. // 若参数为正整数,则程序将暂停该整数个毫秒单位直至用户有任何按键。
  38. cvWaitKey ();
  39.  
  40. // 释放图像内存块
  41. cvReleaseImage (&img);
  42. cvReleaseImage (&out);
  43.  
  44. // 关闭窗口同时释放窗口内存块
  45. cvDestroyWindow ("膨胀前");
  46. cvDestroyWindow ("膨胀后");
  47.  
  48. return ;
  49. }

运行结果

  

代码示例 - 腐蚀

  1. // 此头文件包含图像IO函数的声明
  2. #include "highgui.h"
  3. // 此头文件包含基本的图像处理函数和高级计算机视觉算法
  4. #include "cv.h"
  5.  
  6. int main (void) {
  7.  
  8. // 将D盘目录下名为" 1.jpg "的图像加载至内存并获得一个指向该图像内存块的指针img
  9. IplImage * img = cvLoadImage ("D:\\1.jpg");
  10.  
  11. // 创建一个窗口显示处理前的图像
  12. cvNamedWindow ("腐蚀前", CV_WINDOW_AUTOSIZE);
  13.  
  14. // 将图像装载进窗口并显示此窗口
  15. cvShowImage ("腐蚀前", img);
  16.  
  17. // 创建一个新的图像内存块,以存放处理结果。
  18. IplImage * out = cvCreateImage (
  19. cvGetSize (img),
  20. img->depth,
  21. img->nChannels
  22. );
  23.  
  24. // 腐蚀函数
  25. cvErode (
  26. img,   // 输入图像
  27. out // 输出图像
  28. );
  29.  
  30. // 创建一个窗口显示处理后的图像
  31. cvNamedWindow ("腐蚀后", CV_WINDOW_AUTOSIZE);
  32.  
  33. // 将图像装载进窗口并显示此窗口
  34. cvShowImage ("腐蚀后", out);
  35.  
  36. // 该函数的参数为 0 时,程序将等待用户触发一个按键操作。
  37. // 若参数为正整数,则程序将暂停该整数个毫秒单位直至用户有任何按键。
  38. cvWaitKey ();
  39.  
  40. // 释放图像内存块
  41. cvReleaseImage (&img);
  42. cvReleaseImage (&out);
  43.  
  44. // 关闭窗口同时释放窗口内存块
  45. cvDestroyWindow ("腐蚀前");
  46. cvDestroyWindow ("腐蚀后");
  47.  
  48. return ;
  49. }

运行结果

  

小结

  基于这两个操作,能产生诸如开运算,闭运算等更加复杂的运算。

  在此不做累述。

膨胀和腐蚀 - cvErode() 和 cvDilate() 函数实现的更多相关文章

  1. cvErode和cvDilate腐蚀和膨胀函数

    Erode腐蚀,Dilate膨胀,这两个形态学函数总是成对出现,前者可以消除较小独点如噪音,后者可以使不连通的图像合并成块. void cvErode( const CvArr* src, CvArr ...

  2. OpenCV膨胀和腐蚀示例代码

    #include<cv.h> #include<highgui.h> int main(int argc, char** argv) { IplImage* img = cvL ...

  3. 学习 opencv---(9)形态学图像处理(一):膨胀和腐蚀

    本篇文章中,我们一起探究了图像处理中,最基本的形态学运算--膨胀与腐蚀.浅墨在文章开头友情提醒,用人物照片做腐蚀和膨胀的素材图片得到的效果会比较惊悚,毁三观的,不建议尝试.......... 一.理论 ...

  4. 图像的膨胀与腐蚀——OpenCV与C++的具体实现

    目录 1. 膨胀与腐蚀的原理 2. 膨胀的具体实现 1) OpenCV实现 2) C/C++实现 3) 验证与结果 3. 腐蚀的具体实现 1. 膨胀与腐蚀的原理 膨胀与腐蚀是数学形态学在图像处理中最基 ...

  5. OpenCV膨胀与腐蚀

    膨胀与腐蚀 本篇博客主要介绍使用OpenCV中的函数接口实现对一个图片的腐蚀或者膨胀,听起来有点像是对图像进行放大和缩小的意思,如果你也是这样认为,那我只能说你跟我一样肤浅!!在OpenCV中几乎所有 ...

  6. 膨胀、腐蚀、开、闭(matlab实现)

    膨胀.腐蚀.开.闭运算是数学形态学最基本的变换. 本文主要针对二值图像的形态学 膨胀:把二值图像各1像素连接成分的边界扩大一层(填充边缘或0像素内部的孔): B=[0 1 0      1 1 1   ...

  7. Atitit 图像处理—图像形态学(膨胀与腐蚀)

    Atitit 图像处理-图像形态学(膨胀与腐蚀) 1.1. 膨胀与腐蚀1 1.2. 图像处理之二值膨胀及应用2 1.3. 测试原理,可以给一个5*5pic,测试膨胀算法5 1.4. Photoshop ...

  8. paper 76:膨胀、腐蚀、开、闭运算——数字图像处理中的形态学

    膨胀.腐蚀.开.闭运算是数学形态学最基本的变换.本文主要针对二值图像的形态学膨胀:把二值图像各1像素连接成分的边界扩大一层(填充边缘或0像素内部的孔):腐蚀:把二值图像各1像素连接成分的边界点去掉从而 ...

  9. OpenCV——图像处理入门:膨胀与腐蚀、图像模糊、边缘检测

    全部外部依赖项: opencv_aruco341d.lib opencv_bgsegm341d.lib opencv_calib3d341d.lib opencv_bioinspired341d.li ...

随机推荐

  1. hdu 2732 Leapin' Lizards 最大流 拆点 建图

    题目链接 题意 给定一张网格,格子中有些地方有柱子,有些柱子上面有蜥蜴. 每个柱子只能承受有限只蜥蜴从上面经过.每只蜥蜴每次能走到相距曼哈顿距离\(\leq k\)的格子中去. 问有多少只蜥蜴能走出网 ...

  2. Android Bluetooth抓包

    1. 前提 这里介绍一种在Android上捕获蓝牙数据包的方法 首先你要有一部Android手机:然后你的Android系统版本要在4.4及以上 我没有做过Android开发,不清楚开发者们是如何抓蓝 ...

  3. Windows开发

    1. 介绍 这里简单介绍了Windows应用程序开发的基础知识 2. 基础 Windows下的应用程序有控制台程序和Win32窗口程序,这里讲的是Win32窗口程序 Windows提供了相关静态库(L ...

  4. 【剑指offer】二维数组中的查找☆

    题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数.     自己的思路实在 ...

  5. eclipse主题样式

    Eclipse Color Themeshttp://eclipsecolorthemes.org/ Get it Download from Eclipse Marketplace Install ...

  6. 手游LTV(用户终生价值)计算公式

    在承接APP推广项目中,手游价值变现最直接,核心是获取更多的充值,其中LTV(Lifetime-Value生命周期价值)是一个重要参考指标,可以理解为玩家在其生命周期内对游戏的平均贡献值,为什么要计算 ...

  7. Codeforces Round #450 (Div. 2) C. Remove Extra One【*模拟链表/一个数比前面所有数大就是个record。删掉一个数,让record的个数尽量多。】

    C. Remove Extra One time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  8. C++面向对象程序设计_Part1

    目录 C++历史 C++的组成 C++ 与 C 的数据和函数区别 基于对象与面向对象的区别 C++类的两个经典分类 头文件防卫式声明 头文件的布局 类的声明 类模板简介 内联(inline)函数 访问 ...

  9. 寒假week1---二分查找(二分枚举)

    寒假week1---二分查找(二分枚举)1.适用条件:要查找(枚举)的集合有序 && 查找(枚举)的“条件”具有单调性2.什么是“条件”:example: 1.给定一个有序数组,从中查 ...

  10. bzoj 5092: [Lydsy1711月赛]分割序列

    5092: [Lydsy1711月赛]分割序列 Time Limit: 5 Sec  Memory Limit: 256 MBSubmit: 219  Solved: 100[Submit][Stat ...