python 腐蚀膨胀_python实现图像膨胀和腐蚀算法
如果您觉得本文不错!记得点赞哦!
一. 图像形态学简介:
经验之谈:形态学操作一般作用于二值图像,来连接相邻的元素(膨胀)或分离成独立的元素(侵蚀)。腐蚀和膨胀是针对图片中的白色(即前景)部分!
二. 图像形态学操作 膨胀和腐蚀的算法:
膨胀算法:
对于待操作的像素 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实现图像膨胀和腐蚀算法相关推荐
- python图像腐蚀处理_Python图像处理之膨胀与腐蚀的操作
引言 膨胀与腐蚀是图像处理中两种最基本的形态学操作,膨胀将目标点融合到背景中,向外部扩展,腐蚀与膨胀意义相反,消除连通的边界,使边界向内收缩.在本文中我们将了解使用内核的图像膨胀与腐蚀的基本原理. 让 ...
- python皮同_Python OpenCV 图像的双线性插值算法,全网最细致的算法说明_橡皮擦,一个逗趣的互联网高级网虫-CSDN博客...
原文作者:梦想橡皮擦 原文标题:Python OpenCV 图像的双线性插值算法,全网最细致的算法说明 发布时间:2021-02-17 20:55:32 Python OpenCV 365 天学习计划 ...
- python增强对比度_python增加图像对比度的方法
python增加图像对比度的方法 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: python增加图像对比度的方法.txt ] (友情提示:右键点上行txt文档名 ...
- python水印倾斜_python中图像特定位置的水印算法
目前我正在处理一个图像处理项目,在这个项目中,我需要将图像分割成几个片段,然后在每个片段上应用水印.在 我写了一个代码,通过掩蔽将图像分成几段.您可以找到代码here.现在我想在每个片段上实现水印.水 ...
- python垂直输出_Python实现图像的垂直投影示例
Python + OpenCV 直接上代码 import cv2 import numpy as np from matplotlib import pyplot as plt from PIL im ...
- python全景图像拼接_python实现图像全景拼接
图像的全景拼接包括三大部分:特征点提取与匹配.图像配准.图像融合. 1.基于SIFT的特征点的提取与匹配 利用Sift提取图像的局部特征,在尺度空间寻找极值点,并提取出其位置.尺度.方向信息. 具体步 ...
- python 图片大小_python 区分图像大小(A2、A3、A4)
说明,本人对象负责的项目有大量的加工图像,分别有A2 A3 A4 等规格,且这些图像都是在一起存储,按照相关的档案顺序全组:现在让我分别统计一共的图像数量 以及A2 A3 A4数量,经过一晚努力,现将 ...
- python画球面投影_python - 将图像映射到球体上并绘制3D轨迹 - 堆栈内存溢出
一旦拥有了你的星球,使用mayavi.mlab.plot3d绘制轨迹很容易,所以我将专注于使用mayavi将行星映射到球体的纹理. (原则上我们可以使用matplotlib执行任务,但与mayavi相 ...
- python标注工具_Python labelImg 图像标注工具安装及使用教程windows版(亲测有效)
1.首先先下载这个工具的源代码(此处贴一个github上面的源代码) 地址:https://github.com/tzutalin/labelImg 2.安装 QT5 tools 看到如上图,表示安装 ...
最新文章
- Java记录 -62- java.util.Collections
- pyglet wave.Error: file does not start with RIFF id
- 题目1493:公约数
- Java jdbc中的date,大文本等类型转换
- 部署webservice到远程服务器
- JavaScript匿名函数与托付
- Mac备忘录笔记教学——强大的内置笔记软件
- (一二四)给类对象赋值、以及类对象的返回值
- centos下java编程工具_centos下安装JAVA开发工具(4)------Redis
- python 实现C atoi函数
- OpenCV:鼠标画直线并显示坐标
- discuz模板修改html,Discuz 修改门户的模板——静态页面套用(动态页写死方法以更新)...
- csgo社区服务器维护2021,CSGO国际服启动软件
- Linux下的文件管理
- OUC_2022年夏季《移动软件开发》实验报告-实验2
- mysql 数据导出导入
- Vuforia+Unity AR项目开发测试
- 娱乐头条-03spider
- java 接口权限控制_手把手教你搞定权限管理,结合Spring Security实现接口的动态权限控制!...
- UiPath 安装与下载