python(scipy)实现填充孔洞的方法(非常类似于MATLAB的imfill)
填充二值图像的孔洞是一个非常常见的方法,因为某些原因我不得不用python来写我的程序,当我想要使用类似于MATLAB 中的imfill 方法时, 我最初发现的是opencv 中的cv2.floodFill 的方法,其实现的过程有点麻烦,而且实现的效果不尽人意。在意外中发现scipy库已经实现了填充孔洞的方法,而且实现的过程如同MATLAB那样的简洁。
1、使用Matlab 的imfill 进行填充图像
imfill是matlab的一个函数,在http://www.mathworks.cn/cn/help/images/ref/imfill.html 中有详细的讲解。
简单的举例:
clc;
clear;
BW = im2bw( imread('imfilltest.tif'));
imshow(BW);
holes = imfill(BW, 'holes');BW(~holes) = 1;
figure,imshow(holes);
2、使用python-opencv实现孔洞的填充
这个方法也不多fei话,直接上实现的代码
im_floodfill = mask.copy()
maskS = np.zeros((imgClean.shape[0] + 2, imgClean.shape[1] + 2), dtype=np.uint8)
cv2.floodFill(im_floodfill, maskS, (0, 0), 255) # 核心代码
im_floodfill_inv = cv2.bitwise_not(im_floodfill)
im_out = mask | im_floodfill_inv
3、使用python(scipy)中的scipy.ndimage.binary_fill_holes来填充孔洞
这个方法跟MATLAB的imfill一样简洁方便。官网见链接
语法:
scipy.ndimage.binary_fill_holes(input,structure=None,output=None, origin=0)
参数说明:
- input:待填充的二值图像
- structure:用于计算的结构元素。大尺寸的元素可以使计算速度更快,但可能会漏掉与背景被薄区域隔开的洞。默认元素(具有等于1的方形连通性)会产生直观的结果,其中输入中的所有孔都已填充。
- output:已经填充的输出结果
- origin:结构元素的位置。
举例说明:
from scipy import ndimagea = np.zeros((5, 5), dtype=int)
a[1:4, 1:4] = 1
a[2,2] = 0
a
# array([[0, 0, 0, 0, 0],
# [0, 1, 1, 1, 0],
# [0, 1, 0, 1, 0],
# [0, 1, 1, 1, 0],
# [0, 0, 0, 0, 0]])ndimage.binary_fill_holes(a).astype(int)
# array([[0, 0, 0, 0, 0],
# [0, 1, 1, 1, 0],
# [0, 1, 1, 1, 0],
# [0, 1, 1, 1, 0],
# [0, 0, 0, 0, 0]])# Too big structuring element
ndimage.binary_fill_holes(a, structure=np.ones((5,5))).astype(int)
# array([[0, 0, 0, 0, 0],
# [0, 1, 1, 1, 0],
# [0, 1, 0, 1, 0],
# [0, 1, 1, 1, 0],
# [0, 0, 0, 0, 0]])
python(scipy)实现填充孔洞的方法(非常类似于MATLAB的imfill)相关推荐
- python scipy安装失败的解决方法
python scipy安装失败的解决方法 from scipy.misc import imreadTraceback (most recent call last):File "D:/P ...
- python卷积计算_python scipy卷积运算的实现方法
scipy的signal模块经常用于信号处理,卷积.傅里叶变换.各种滤波.差值算法等. *两个一维信号卷积 >>> import numpy as np >>> x ...
- python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法
python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0. zfill()方法语法: ...
- python字符串补空格输出_python实现指定字符串补全空格、前面填充0的方法
Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0. zfill()方法语法:str.zfill(width) 参数width -- 指定字符串的长度.原字符串右对齐,前 ...
- python颜色填充函数_【图像后处理】python+OpenCV填充孔洞
我们在进行图像分割后,分割结果有时会有一些小孔洞,如图1所示,其中黑白两色表示两种不同的类别.一般情况下,这些孔洞属于错分情况,为了优化结果,我们通常对这些孔洞进行填充.今天我们就用python语言基 ...
- python画图代码turtle-使用Python的turtle模块画图的方法
简介:turtle是一个简单的绘图工具.它提供了一个海龟,你可以把它理解为一个机器人,只听得懂有限的指令. 1.在文件头写上如下行,这能让我们在语句中插入中文 #-*-coding:utf-8-*- ...
- python安装pandas模块-python安装numpy和pandas的方法步骤
最近要对一系列数据做同比比较,需要用到numpy和pandas来计算,不过使用python安装numpy和pandas因为linux环境没有外网遇到了很多问题就记下来了.首要条件,python版本必须 ...
- python内点法_Python_Day_02 str内部方法总结
刚开始学习Python,看了一天的字符串内部方法,现在来总结一下. capitalize(self) 将一句话的首字母变大写,其他字母都变小 1 name = "love PyThon&qu ...
- python英文词云代码_使用python实现个性化词云的方法
先上图片 词云图 需要模板 pip install jieba pip install wordcloud 还需要安装另外两个东西这两个我也不太懂借鉴百度写上去的 pip install scipy ...
最新文章
- Golang的interface实践
- LaTex 实数集R
- VTK:可视化之ColorGlyphs
- 已经windows如何在安装linux,如何在已经安装linux情况下安装windows
- Linux CentOs6 命令学习
- 在英特尔架构服务器上构建基于矢量包处理(VPP)的快速网络协议栈
- How to remove replication in Syteline
- 联想340c笔记本cpu能升级吗_高性价比十大笔记本电脑(由高到低价格),有一台五五开也有.........
- azure 使用_使用Azure Data Studio开始您的旅程
- Spring Cloud (断路器) Hystrix(三)
- H3C 常用信息查看命令
- 华为认证hcnp题库多久更新一次?华为hcnp认证值不值得考?
- HTML:如何创建表格
- 常见搜索算法(二):二分查找
- android如何基于父布局,如何根据父视图的尺寸调整Android视图的大小
- string转LPCTSTR
- mt2503 如何使用META DLL API写两个以上IMEI
- ath79 spi报错:ath79-spi 1f000000.spi: cs1 = max 1
- Android音视频方向进阶路线及资源合集
- linux可以识别多少lun,Linux上每个SCSI设备的最大LUN数目是多少(by quqi99)