博客原创出处:http://blog.csdn.net/lu597203933/article/details/36222277

这里我们主要想讲解冈萨雷斯的数字图像处理这本书上膨胀腐蚀的定义及用opencv实现的结果,然后对比它们之间的差异。

一:opencv实现

在这之前可以看我的另外一篇blog:http://blog.csdn.net/lu597203933/article/details/17184439

膨胀:

案例代码:

[cpp] view plaincopy print?
  1. int main()
  2. {
  3. int a[8][8] = {
  4. {0,0,0,0,0,0,0,0},
  5. {0,0,5,1,0,0,1,1},
  6. {0,1,0,1,0,1,0,0},
  7. {0,1,1,2,1,0,1,0},
  8. {0,0,0,1,0,1,0,0},
  9. {0,1,0,0,0,0,0,1},
  10. {0,0,0,0,0,0,0,0},
  11. {0,0,0,0,0,0,0,0}
  12. };
  13. Mat S = Mat::zeros(8, 8, CV_8UC1);
  14. for(int j = 0; j < S.rows; j++)
  15. {
  16. for(int i = 0; i < S.cols; i++)
  17. {
  18. S.at<uchar>(j,i) = a[j][i];
  19. }
  20. }
  21. cout << "S = " << endl << " " << S << endl;
  22. Mat result;
  23. Mat dilated = Mat::zeros(3, 3, CV_8UC1);
  24. dilated.at<uchar>(0,1) = 1;
  25. //eroded.at<uchar>(0,2) = 1;
  26. dilated.at<uchar>(1,0) = 1;
  27. dilated.at<uchar>(1,1) = 2;          // 结构元素非0即1
  28. dilated.at<uchar>(1,2) = 1;
  29. dilated.at<uchar>(2,1) = 1;
  30. cout << "dilated = " << endl << " " << dilated << endl;
  31. dilate(S, result, dilated);
  32. cout << "result = " << endl << " " << result << endl;
  33. return 0;
  34. }

结果:

膨胀就是如果结构元B有一处非0,而A对应位置非0,则求出A中与B中对应非0处所有像素最大值来代替当前像素点值。Opencv中默认的结构元是3*3的矩阵,全部非0。

腐蚀:

案例代码:

[cpp] view plaincopy print?
  1. int main()
  2. {
  3. int a[8][8] = {
  4. {0,0,0,0,0,0,0,0},
  5. {0,0,5,1,0,0,1,1},
  6. {0,1,0,1,0,1,0,0},
  7. {0,1,1,2,1,0,1,0},
  8. {0,0,0,1,0,1,0,0},
  9. {0,1,0,0,0,0,0,1},
  10. {0,0,0,0,0,0,0,0},
  11. {0,0,0,0,0,0,0,0}
  12. };
  13. Mat S = Mat::zeros(8, 8, CV_8UC1);
  14. for(int j = 0; j < S.rows; j++)
  15. {
  16. for(int i = 0; i < S.cols; i++)
  17. {
  18. S.at<uchar>(j,i) = a[j][i];
  19. }
  20. }
  21. cout << "S = " << endl << " " << S << endl;
  22. Mat result;
  23. Mat eroded = Mat::zeros(3, 3, CV_8UC1);
  24. eroded.at<uchar>(0,1) = 1;
  25. //eroded.at<uchar>(0,2) = 1;
  26. eroded.at<uchar>(1,0) = 1;
  27. eroded.at<uchar>(1,1) = 2;          // 结构元素非0即1
  28. eroded.at<uchar>(1,2) = 1;
  29. eroded.at<uchar>(2,1) = 1;
  30. cout << "eroded = " << endl << " " << eroded << endl;
  31. erode(S, result, eroded);
  32. cout << "result = " << endl << " " << result << endl;
  33. return 0;

结果:

腐蚀就是结构元B处非0,则A对应位置也全非0,且取全非0处最小值来代替当前像素点的值。

二:书中定义

膨胀: . 这里的B是结构元,B~是结构元的反射,反射不明白可以看书,就是旋转或者按中心点对称。如:

0 1   的反射就是 1 1

1 1                        1 0

与opencv中唯一的区别就是必须得求反射,而opencv中则直接用给定的结构元B。

腐蚀: 

案例:

图像形态学操作—腐蚀膨胀深入相关推荐

  1. [图像形态学操作]——腐蚀和膨胀、开闭运算、黑帽礼帽

    形态学转换是基于图像形状的一些简单操作,它通常在二进制图像上执行.腐蚀和膨胀是两个基本的形态学运算符.然后它的变体形式如:开运算.闭运算.礼帽黑帽等. 一.连通性 在图像学当中,图像的最小单位是像素, ...

  2. 【学习笔记】opencv的python接口 形态学操作 腐蚀 膨胀 通用形态学函数

    腐蚀 img=np.zeros((5,5),np.uint8) img[1:4,1:4]=1 kernel=np.ones((3,1),np.uint8) erosion=cv2.erode(img, ...

  3. 机器学习进阶-图像形态学操作-腐蚀操作 1.cv2.erode(进行腐蚀操作)

    1.cv2.erode(src, kernel, iteration) 参数说明:src表示的是输入图片,kernel表示的是方框的大小,iteration表示迭代的次数 腐蚀操作原理:存在一个ker ...

  4. 图像形态学概要-腐蚀、膨胀、开运算、闭运算、形态学梯度(形态学边缘提取)、顶帽操作、黑帽操作

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 图像形态学中两种最基本的操作就是对图形的腐蚀和膨 ...

  5. opencv进阶学习笔记13:图像形态学操作大全(膨胀,腐蚀,开闭,黑帽,顶帽,梯度)python版

    基础版学习笔记: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 基础版形态学: opencv学 ...

  6. OpenCV与图像处理学习六——图像形态学操作:腐蚀、膨胀、开、闭运算、形态学梯度、顶帽和黑帽

    OpenCV与图像处理学习六--图像形态学操作:腐蚀.膨胀.开.闭运算.形态学梯度.顶帽和黑帽 四.图像形态学操作 4.1 腐蚀和膨胀 4.1.1 图像腐蚀 4.1.2 图像膨胀 4.2 开运算与闭运 ...

  7. 形态学操作之膨胀与腐蚀

    文章目录 1. 形态学 2. 腐蚀 - 黑进白退 3. 膨胀 - 白进黑退 4. 开/闭运算 5. 其它形态学操作 1. 形态学   形态学操作是根据图像形状进行的简单操作.一般情况下对二值化图像/灰 ...

  8. OpenCV中图像形态学操作

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:视学算法 图像形态学是图像处理的分支学科,在二值图像处理 ...

  9. 【youcans 的 OpenCV 例程200篇】114. 形态学操作之膨胀

    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程 2 ...

最新文章

  1. 会计与python结合-财务与会计前沿讲座——“大数据集训”开讲
  2. 牛客题霸 NC4 判断链表中是否有环
  3. django关闭浏览器,怎样清除 cookies 和 session
  4. Spring JPA 中的Repository体系
  5. 搭建一款开源的微信商城小程序:海风小店
  6. ChaiNext:市场热情仍在,也需留意高位风险
  7. 数据结构之线性表学习一
  8. jumserver 官方文档和
  9. python音频识别_音频识别和比较
  10. Linux如何增加SSH端口号
  11. linux ubuntu安装svn,在Ubuntu下安装SVN工具RabbitVCS
  12. 【马尔科夫链-蒙特卡罗】马尔科夫链-蒙特卡罗方法对先验分布进行抽样
  13. 仿ios网易支付登录特效
  14. 八卦는 生命의 運動 (韓長庚 易學原理總論)
  15. 使用canvas生成水印watermark,有详细注释,简单易懂
  16. win10修改user用户名,完美解决,亲试无bugs
  17. python奇数阶乘求和_Python阶乘求和的方法
  18. 瞎折腾实录:构建 Armel 版本的 .NET Core 教程和资料资源
  19. mavic山地轮组_如何设计达到新高度的山地标志
  20. 数电基础-基本逻辑门和逻辑代数的基本定律

热门文章

  1. zabbix告警时间和恢复时间相同的解决方法
  2. Linux命令-chmod、chown和chgrp
  3. HTAP数据库 PostgreSQL 场景与性能测试之 28 - (OLTP) 高并发点更新
  4. JS替换空格回车换行符
  5. Ansible自动化运维工具介绍
  6. 转:ECharts图表组件之简单关系图:如何轻松实现另类站点地图且扩展节点属性实现点击节点页面跳转...
  7. faststone 注册码
  8. Exchange 2007 容易理解错误的几个地方
  9. 本地配yum(没有网络)
  10. 100M不限流量香港VPS服务器租用注意事项