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

   void cvErode( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 )

   void cvDilate( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 );

这两个函数的参数相同,是一对“相反”的函数(这里的相反并不是指后一个函数可以将前一个函数处理的图像恢复,而是一个缩小图像团块,一个放大图像的团块)

src
   输入图像.
   dst
   输出图像.
   element
   用于膨胀的结构元素。若为 NULL, 则使用 3×3 长方形的结构元素
   iterations
   膨胀的次数
   膨胀可以重复进行 (iterations) 次. 对彩色图像,每个彩色通道单独处理。

下面的程序将演示这两个函数,腐蚀和膨胀的过程

[cpp] view plaincopyprint?
  1. <code class=“language-cpp”>#include “cv.h”
  2. #include “cxcore.h”
  3. #include “highgui.h”
  4. int main(int argc,char** argv)
  5. {
  6. if(argc<2)
  7. return 0;
  8. int a=1;
  9. int eIter=1,dIter=1,exitFlag=1;
  10. IplImage *image,*image1,*image2;
  11. image = cvLoadImage(argv[1]);
  12. image1 = cvCreateImage(cvSize(image->width,image->height),8,1);
  13. image2 = cvCreateImage(cvSize(image->width,image->height),8,1);
  14. cvCvtColor(image,image1,CV_RGB2GRAY);
  15. cvCvtColor(image,image2,CV_RGB2GRAY);
  16. cvNamedWindow(”image”,1);
  17. cvShowImage(”image”,image);
  18. cvNamedWindow(”Select”,1);
  19. cvCreateTrackbar(”eIterations”,“Select”,&eIter,20,0);
  20. cvCreateTrackbar(”dIterations”,“Select”,&dIter,20,0);
  21. cvNamedWindow(”Erode”,1);
  22. cvNamedWindow(”Dilate”,1);
  23. cvShowImage(”Erode”,image1);
  24. cvShowImage(”Dilate”,image2);
  25. cvWaitKey(0);
  26. while(1)
  27. {
  28. //腐蚀,消除细小物质
  29. cvErode(image1,image1,0,2);
  30. cvShowImage(”Erode”,image1);
  31. std::cout<<”Erode”<<std::endl;
  32. a=cvWaitKey(0);
  33. if((char) a == ‘q’)
  34. break;
  35. }
  36. cvCopy(image1,image2);
  37. a=1;
  38. while(1)
  39. {
  40. //腐蚀,填充物体内细小物质
  41. cvDilate(image2,image2,0,1);
  42. cvShowImage(”Dilate”,image2);
  43. std::cout<<”Dilate”<<std::endl;
  44. a=cvWaitKey(0);
  45. if((char) a == ‘q’)
  46. break;
  47. }
  48. return 0;
  49. }</code>
  1. #include "cv.h"
  2. #include "cxcore.h"
  3. #include "highgui.h"
  4. int main(int argc,char** argv)
  5. {
  6. if(argc<2)
  7. return 0;
  8. int a=1;
  9. int eIter=1,dIter=1,exitFlag=1;
  10. IplImage *image,*image1,*image2;
  11. image = cvLoadImage(argv[1]);
  12. image1 = cvCreateImage(cvSize(image->width,image->height),8,1);
  13. image2 = cvCreateImage(cvSize(image->width,image->height),8,1);
  14. cvCvtColor(image,image1,CV_RGB2GRAY);
  15. cvCvtColor(image,image2,CV_RGB2GRAY);
  16. cvNamedWindow("image",1);
  17. cvShowImage("image",image);
  18. cvNamedWindow("Select",1);
  19. cvCreateTrackbar("eIterations","Select",&eIter,20,0);
  20. cvCreateTrackbar("dIterations","Select",&dIter,20,0);
  21. cvNamedWindow("Erode",1);
  22. cvNamedWindow("Dilate",1);
  23. cvShowImage("Erode",image1);
  24. cvShowImage("Dilate",image2);
  25. cvWaitKey(0);
  26. while(1)
  27. {
  28. //腐蚀,消除细小物质
  29. cvErode(image1,image1,0,2);
  30. cvShowImage("Erode",image1);
  31. std::cout<<"Erode"<<std::endl;
  32. a=cvWaitKey(0);
  33. if((char) a == 'q')
  34. break;
  35. }
  36. cvCopy(image1,image2);
  37. a=1;
  38. while(1)
  39. {
  40. //腐蚀,填充物体内细小物质
  41. cvDilate(image2,image2,0,1);
  42. cvShowImage("Dilate",image2);
  43. std::cout<<"Dilate"<<std::endl;
  44. a=cvWaitKey(0);
  45. if((char) a == 'q')
  46. break;
  47. }
  48. return 0;
  49. }

这个程序可以选择迭代次数为1,然后不断循环(可以作为迭代次数),观察每次迭代后的效果。

效果:

下面是实验效果(原图是在车辆跟踪中用帧间差分法得到的二值化图像),可以发现通过先腐蚀Erode多次,后膨胀Dilate多次,图像的噪音消除,物体内细小物质也被填充。

第一幅图右边为原图,左边为腐蚀后消除了噪音点和干扰点的图。

第二幅图右边是和第一幅图一样的原图,但是左边的图像是对第一幅图像左边的图进行了膨胀操作,可以看到, 物体内细小物质被填充。

通过这样的多次迭代腐蚀再膨胀的过程,可以得到效果更好的检测图像,方便后续提取运动目标操作。

转载自:https://blog.csdn.net/futurewu/article/details/10047409

OPenCV的中cvErode和cvDilate腐蚀和膨胀函数相关推荐

  1. opencv python 图像形态学操作/图像腐蚀/图像膨胀/开运算/闭运算/顶帽/黑帽

    Morphological Transformations 1图像腐蚀 腐蚀的基本思想:侵蚀前景物体的边界(总是试图保持前景为白色):内核在图像中滑动(如在2D卷积中).只有当内核下的所有像素都是1时 ...

  2. 基于python的opencv图像形态学处理(图像腐蚀与膨胀操作以及礼帽与黑帽)

    腐蚀与膨胀 图像的腐蚀与膨胀互为逆向操作,通常用于处理二值图像(黑白图,以黑色为底面背景),因此需要先进行二值化处理,腐蚀和膨胀通俗的理解就是,在指定大小的卷积核内,如果该卷积核内全为黑色或全为白色, ...

  3. Opencv学习笔记(十二):图片腐蚀和膨胀操作

    文章目录 腐蚀 代码 效果 膨胀 代码 效果 开运算/闭运算 代码 腐蚀 原理:是在原图的小区域内取局部最小值.因为是二值化图,只有 0 和 255,所以小区域内有一个是 0 该像素点就为 0: 作用 ...

  4. 图像二值形态学——腐蚀和膨胀的C语言实现

    数学形态学是法国和德国科学家在研究岩石结构时建立的一门科学.形态学的用途主要是获取物体拓扑和结构信息,通过物体和结构元素相互作用的某些运算,得到物体更本质的形态.在图像处理中的应用主要是:利用形态学的 ...

  5. OpenCV-Python图像处理:腐蚀和膨胀原理及erode、dilate函数介绍

    ☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython ░ 一.引言 关于图像的腐蚀和膨胀,网上介绍的资料非常多,老猿也看了很多,总体来说主要偏向于就 ...

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

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

  7. opencv中的腐蚀与膨胀(转)

    图像腐蚀和图像膨胀是图像中两种最基本形态学操作. void erode( const Mat& src, Mat& dst, const Mat& element,Point ...

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

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

  9. OpenCV 【十八】图像平滑处理/腐蚀与膨胀(Eroding and Dilating)/开闭运算,形态梯度,顶帽,黑帽运算

    图像滤波总结(面试经验总结)https://blog.csdn.net/Darlingqiang/article/details/79507468 目录 part one 图像平滑处理 1原理 2代码 ...

最新文章

  1. Linux定时任务Crontab执行PHP脚本
  2. Zookeeper 安装
  3. Annotations
  4. c轴 t轴 l轴_从事数控工作的你知道3轴、3+2轴定位与5轴联动的区别吗?
  5. qt单步调试linux程序,用Qt 调用GDB调试 Arm程序 详细步骤----可单步执行每一行
  6. 边缘计算计算机科学与技术,边缘计算现状与展望-ComputerScience-WayneStateUniversity.PDF...
  7. Java并发编程之ReentrantLock重入锁
  8. phpstorm 如何设置函数的注释内容
  9. keystone nova v2 python
  10. C/C++常见标准头文件前格式探讨
  11. 滴滴否认上海团队解散;雄安超前布局 5G;小米拆分独立品牌 | 极客头条
  12. 创新工场 蔡学镛SINA微博中向我们提及的书籍、文章统计 (二)
  13. 体脂数C语言switch,你真胖么 体脂率是什么 体脂率的计算方法
  14. python对txt文件进行处理实战_python数据处理实战
  15. python中加注释_python中如何添加注释
  16. Windows10系统C盘文件实际大小占用空间和可用空间不一致(相差差8到20G)
  17. 不同系统mysql安装教程
  18. Android设置来电铃声和分享操作
  19. 商家门店会员管理,只要这五步,稳步提升销售额
  20. 华为linux系统能用Cad么,华为平板能装cad画图吗 华为平板可以用cad软件吗?

热门文章

  1. 函授计算机大专自我鉴定100字,函授大学毕业自我鉴定100字(精选5篇)
  2. 8.面向对象-----类和对象
  3. 【苹果cms10 Maccmsv10 站群深度定制版 开发日志】 新增日志模块
  4. 【树莓派】最常用的树莓派 Linux 命令及说明
  5. 【Java】冒泡排序
  6. 【Python】Python库之文本处理
  7. azure 使用_如何使用JavaScript在Azure上开始使用SignalR
  8. 安全威胁建模综述_如何使用威胁建模分析应用程序的安全性
  9. mac docker 共享_如何在Docker for Mac中加快共享文件访问
  10. python语言有什么作用_python“ with”语句的用途是什么?