如果您觉得本文不错!记得点赞哦!

一. 图像形态学简介:

经验之谈:形态学操作一般作用于二值图像,来连接相邻的元素(膨胀)或分离成独立的元素(侵蚀)。腐蚀和膨胀是针对图片中的白色(即前景)部分!

二. 图像形态学操作 膨胀和腐蚀的算法:

膨胀算法:

对于待操作的像素 f(x,y),不论 f(x,y-1) 、f(x,y+1) 、f(x-1,y) 、f(x+1,y) 哪一个为255,则 f(x,y)=255。

膨胀操作 ↑

换句话说:将待操作的图像像素与以下  4-近邻矩阵 相乘,结果大于255的话,将中心像素设为255。

膨胀:待操作像素 * 上面矩阵 > =255,f(x,y) = 255。 ↑

腐蚀算法:

对于待操作的像素 f(x,y),只有 f(x,y-1) 、f(x,y+1) 、f(x-1,y) 、f(x+1,y) 都为255,则 f(x,y)=255。

换句话说:将待操作的图像像素与以下  4-近邻矩阵 相乘,结果小于255*4的话,将中心像素设为0。

腐蚀:待操作像素 * 上面矩阵 < 255*4,f(x,y) = 0 。↑

三. python实现图像膨胀和腐蚀

1 #Writer : wojianxinygcl@163.com

2 #Date : 2020.3.21

3 importcv24 importnumpy as np5 importmatplotlib.pyplot as plt6

7 #Gray scale

8 defBGR2GRAY(img):9 b =img[:, :, 0].copy()10 g = img[:, :, 1].copy()11 r = img[:, :, 2].copy()12

13 #Gray scale

14 out = 0.2126 * r + 0.7152 * g + 0.0722 *b15 out =out.astype(np.uint8)16

17 returnout18

19 #Otsu Binalization

20 def otsu_binarization(img, th=128):21 H, W =img.shape22 out =img.copy()23

24 max_sigma =025 max_t =026

27 #determine threshold

28 for _t in range(1, 255):29 v0 = out[np.where(out <_t m0="np.mean(v0)" if len> 0 else0.31 w0 = len(v0) / (H *W)32 v1 = out[np.where(out >=_t)]33 m1 = np.mean(v1) if len(v1) > 0 else0.34 w1 = len(v1) / (H *W)35 sigma = w0 * w1 * ((m0 - m1) ** 2)36 if sigma >max_sigma:37 max_sigma =sigma38 max_t =_t39

40 #Binarization

41 print("threshold >>", max_t)42 th =max_t43 out[out < th] =044 out[out >= th] = 255

45

46 returnout47

48

49 #Morphology Dilate

50 def Morphology_Dilate(img, Dil_time=1):51 H, W =img.shape52

53 #kernel

54 MF = np.array(((0, 1, 0),55 (1, 0, 1),56 (0, 1, 0)), dtype=np.int)57

58 #each dilate time

59 out =img.copy()60 for i inrange(Dil_time):61 tmp = np.pad(out, (1, 1), ‘edge‘)62 for y in range(1, H):63 for x in range(1, W):64 if np.sum(MF * tmp[y-1:y+2, x-1:x+2]) >= 255:65 out[y, x] = 255

66

67 returnout68

69

70 #Morphology Erode

71 def Morphology_Erode(img, Erode_time=1):72 H, W =img.shape73 out =img.copy()74

75 #kernel

76 MF = np.array(((0, 1, 0),77 (1, 0, 1),78 (0, 1, 0)), dtype=np.int)79

80 #each erode

81 for i inrange(Erode_time):82 tmp = np.pad(out, (1, 1), ‘edge‘)83 #erode

84 for y in range(1, H):85 for x in range(1, W):86 if np.sum(MF * tmp[y-1:y+2, x-1:x+2]) < 255*4:87 out[y, x] =088

89 returnout90

91

92 #Read image

93 img = cv2.imread("../paojie.jpg").astype(np.float32)94

95 #Grayscale

96 gray =BGR2GRAY(img)97

98 #Otsu‘s binarization

99 otsu =otsu_binarization(gray)100

101 #Morphology - dilate

102 erode_result = Morphology_Erode(otsu, Erode_time=2)103 dilate_result = Morphology_Dilate(otsu,Dil_time=2)104

105 #Save result

106 cv2.imwrite("Black_and_white.jpg",otsu)107 cv2.imshow("Black_and_white",otsu)108 cv2.imwrite("erode_result.jpg", erode_result)109 cv2.imshow("erode_result", erode_result)110 cv2.imwrite("dilate_result.jpg", dilate_result)111 cv2.imshow("dilate_result",dilate_result)112 cv2.waitKey(0)113 cv2.destroyAllWindows()

四. 实验结果:

二值图像(左),膨胀图像(中),侵蚀图像(右) ↑

五. 参考内容:

六. 版权声明:

未经作者允许,请勿随意转载抄袭,抄袭情节严重者,作者将考虑追究其法律责任,创作不易,感谢您的理解和配合!

python 腐蚀膨胀_python实现图像膨胀和腐蚀算法相关推荐

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

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

  2. python皮同_Python OpenCV 图像的双线性插值算法,全网最细致的算法说明_橡皮擦,一个逗趣的互联网高级网虫-CSDN博客...

    原文作者:梦想橡皮擦 原文标题:Python OpenCV 图像的双线性插值算法,全网最细致的算法说明 发布时间:2021-02-17 20:55:32 Python OpenCV 365 天学习计划 ...

  3. python增强对比度_python增加图像对比度的方法

    python增加图像对比度的方法 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  python增加图像对比度的方法.txt ] (友情提示:右键点上行txt文档名 ...

  4. python水印倾斜_python中图像特定位置的水印算法

    目前我正在处理一个图像处理项目,在这个项目中,我需要将图像分割成几个片段,然后在每个片段上应用水印.在 我写了一个代码,通过掩蔽将图像分成几段.您可以找到代码here.现在我想在每个片段上实现水印.水 ...

  5. python垂直输出_Python实现图像的垂直投影示例

    Python + OpenCV 直接上代码 import cv2 import numpy as np from matplotlib import pyplot as plt from PIL im ...

  6. python全景图像拼接_python实现图像全景拼接

    图像的全景拼接包括三大部分:特征点提取与匹配.图像配准.图像融合. 1.基于SIFT的特征点的提取与匹配 利用Sift提取图像的局部特征,在尺度空间寻找极值点,并提取出其位置.尺度.方向信息. 具体步 ...

  7. python 图片大小_python 区分图像大小(A2、A3、A4)

    说明,本人对象负责的项目有大量的加工图像,分别有A2 A3 A4 等规格,且这些图像都是在一起存储,按照相关的档案顺序全组:现在让我分别统计一共的图像数量 以及A2 A3 A4数量,经过一晚努力,现将 ...

  8. python画球面投影_python - 将图像映射到球体上并绘制3D轨迹 - 堆栈内存溢出

    一旦拥有了你的星球,使用mayavi.mlab.plot3d绘制轨迹很容易,所以我将专注于使用mayavi将行星映射到球体的纹理. (原则上我们可以使用matplotlib执行任务,但与mayavi相 ...

  9. python标注工具_Python labelImg 图像标注工具安装及使用教程windows版(亲测有效)

    1.首先先下载这个工具的源代码(此处贴一个github上面的源代码) 地址:https://github.com/tzutalin/labelImg 2.安装 QT5 tools 看到如上图,表示安装 ...

最新文章

  1. Java记录 -62- java.util.Collections
  2. pyglet wave.Error: file does not start with RIFF id
  3. 题目1493:公约数
  4. Java jdbc中的date,大文本等类型转换
  5. 部署webservice到远程服务器
  6. JavaScript匿名函数与托付
  7. Mac备忘录笔记教学——强大的内置笔记软件
  8. (一二四)给类对象赋值、以及类对象的返回值
  9. centos下java编程工具_centos下安装JAVA开发工具(4)------Redis
  10. python 实现C atoi函数
  11. OpenCV:鼠标画直线并显示坐标
  12. discuz模板修改html,Discuz 修改门户的模板——静态页面套用(动态页写死方法以更新)...
  13. csgo社区服务器维护2021,CSGO国际服启动软件
  14. Linux下的文件管理
  15. OUC_2022年夏季《移动软件开发》实验报告-实验2
  16. mysql 数据导出导入
  17. Vuforia+Unity AR项目开发测试
  18. 娱乐头条-03spider
  19. java 接口权限控制_手把手教你搞定权限管理,结合Spring Security实现接口的动态权限控制!...
  20. UiPath 安装与下载

热门文章

  1. Game boy模拟器(10):计时器
  2. 2022-11-17 更高效的Cascades优化器 - Columbia Query Optimizer
  3. 记群脉冲试验环境布置
  4. 云计算和大数据的标准化需求和标准化组织有哪些?
  5. 如何快速查找并删除手机上的重复文件
  6. WPLSoft PLC(可编程逻辑控制器)——应用指令
  7. java反射一篇搞定
  8. QAD的“炫富挑战”Accepted
  9. 计算机培训ppt教案,solidworks培训教案
  10. 如何对分类构件进行标选颜色