使用Python-OpenCV消除图像中孤立的小区域操作


Posted in Python onJuly 05, 2020

之前一直使用Skimage中的形态学处理来进行孤立小区域的去除,代码如下

img = morphology.remove_small_objects(img, size)

img = morphology.remove_small_holes(img, size)

后面需要将相应算法翻译到C++环境中,而Skimage没有对应的C++版本,为了确保python算法和C++算法结果的一致性,需要进行迁移,因而打算使用OpenCV来重写去除孤立小区域的代码。代码如下:

_,binary = cv2.threshold(img,0.1,1,cv2.THRESH_BINARY)
 image,contours,hierarch=cv2.findContours(binary,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
 for i in range(len(contours)):
  area = cv2.contourArea(contours[i])
  if area < threshold:
   cv2.drawContours(image,[contours[i]],0,0,-1)

其中对于输入图像img首先使用阈值处理获得二值化图像,cv2.threshold表示进行阈值二值化处理,0.1是设定的阈值(img是0-1图像),1表示图像中的最大值,cv2.THRESH_BINARY表示图像处理的方法,在openCv中有如下记录

使用Python-OpenCV消除图像中孤立的小区域操作

然后使用findContours,用来获得二值化图像的轮廓信息,findContours中cv2.RETR_EXTERNAL是表示轮廓获取方式,是表示内圈的轮廓不需要进行获取,cv2.CHAIN_APPROX_NONE表示是轮廓曲线记录的方式,CHAIN_APPROX_NONE表示记录所有的轮廓点,具体的参数说明可以参看:

https://docs.opencv.org/3.0-beta/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=findcontours

使用Python-OpenCV消除图像中孤立的小区域操作

然后,后面的contourArea是用来获取轮廓所包围的面积,threshold是面积阈值,当小于该阈值时认为是孤立小区域,需要去除

最后drawContours是对孤立小区域进行去除的方式,去除操作比较简单,就是往这些区域里面填充为0即可,drawContours的参量可参考如下:

https://docs.opencv.org/3.0-beta/modules/imgproc/doc/drawing_functions.html?highlight=drawcontours

使用Python-OpenCV消除图像中孤立的小区域操作

这里,drawContours的第一个参量是输入待处理图像,第二个参量是将要处理的孤立区域轮廓Vector,第三个参量是表示轮廓的坐标,这里为0表示contours的第一个,第四个参量表示填充的数值,这里是integer的情况下则表明是灰度图,填充为1,而最后一个参量为-1,是thickness,表明按照填充方式处理该轮廓围绕的区域

示例如下:

使用Python-OpenCV消除图像中孤立的小区域操作

使用Python-OpenCV消除图像中孤立的小区域操作

以上这篇使用Python-OpenCV消除图像中孤立的小区域操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的map、reduce和filter浅析
Apr 26 Python
跟老齐学Python之画圈还不简单吗?
Sep 20 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
Nov 29 Python
pandas对指定列进行填充的方法
Apr 11 Python
python tornado微信开发入门代码
Aug 24 Python
Django连接数据库并实现读写分离过程解析
Nov 13 Python
opencv-python 提取sift特征并匹配的实例
Dec 09 Python
pytorch 求网络模型参数实例
Dec 30 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
Mar 09 Python
Python关于拓扑排序知识点讲解
Jan 04 Python
python之基数排序的实现
Jul 26 Python
一篇文章弄懂Python中的内建函数
Aug 07 Python
python使用opencv resize图像不进行插值的操作
Jul 05 #Python
Python-openCV开运算实例
Jul 05 #Python
python 图像插值 最近邻、双线性、双三次实例
Jul 05 #Python
python cv2.resize函数high和width注意事项说明
Jul 05 #Python
Python中flatten( ),matrix.A用法说明
Jul 05 #Python
python线性插值解析
Jul 05 #Python
使用keras实现非线性回归(两种加激活函数的方式)
Jul 05 #Python
You might like
PHP正则表达式之定界符和原子介绍
2012/10/05 PHP
php创建多级目录的方法
2015/03/24 PHP
phpmyadmin在宝塔面板里进不去的解决方案
2020/07/06 PHP
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
jquery选择器之内容过滤选择器详解
2014/01/27 Javascript
通过JS判断联网类型和连接状态的实现代码
2015/04/01 Javascript
JavaScript 面向对象与原型
2015/04/10 Javascript
jQuery检测输入的字符串包含的中英文的数量
2015/04/17 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
2015/05/11 Javascript
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
2016/08/05 Javascript
angularJS 如何读写缓冲的方法(推荐)
2016/08/06 Javascript
HTML5实现微信拍摄上传照片功能
2017/04/21 Javascript
javaScript 连接打印机,打印小票的实例
2017/12/29 Javascript
浅谈vue项目重构技术要点和总结
2018/01/23 Javascript
node.js中fs文件系统目录操作与文件信息操作
2018/02/24 Javascript
vue异步axios获取的数据渲染到页面的方法
2018/08/09 Javascript
CKEditor4配置与开发详细中文说明文档
2018/10/08 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
2018/11/14 Javascript
详解小程序云开发攻略(解决最棘手的问题)
2019/09/30 Javascript
[01:52]PWL S2开团时刻第四期——DOTA2成语故事
2020/12/03 DOTA
windows下安装Python的XlsxWriter模块方法
2018/05/03 Python
Python操作Sql Server 2008数据库的方法详解
2018/05/17 Python
如何通过雪花算法用Python实现一个简单的发号器
2019/07/03 Python
Django rest framework jwt的使用方法详解
2019/08/08 Python
pandas 对日期类型数据的处理方法详解
2019/08/08 Python
在python3中实现查找数组中最接近与某值的元素操作
2020/02/29 Python
python的json包位置及用法总结
2020/06/21 Python
Python自动化xpath实现自动抢票抢货
2020/09/19 Python
纽约服装和生活方式品牌:Saturdays NYC
2017/08/13 全球购物
Deichmann英国:德国鞋类零售商
2021/01/30 全球购物
安全检查验收制度
2014/01/12 职场文书
低碳环保倡议书
2014/04/14 职场文书
复兴之路观后感3000字
2015/06/02 职场文书
mybatis中注解与xml配置的对应关系和对比分析
2021/08/04 Java/Android
Golang Web 框架Iris安装部署
2022/08/14 Python