使用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修改Excel数据的实例代码
Nov 01 Python
python下调用pytesseract识别某网站验证码的实现方法
Jun 06 Python
Python打印输出数组中全部元素
Mar 13 Python
python topN 取最大的N个数或最小的N个数方法
Jun 04 Python
Django model update的多种用法介绍
Mar 28 Python
Pandas分组与排序的实现
Jul 23 Python
python实现网站用户名密码自动登录功能
Aug 09 Python
python3 实现调用串口功能
Dec 26 Python
Python字典添加,删除,查询等相关操作方法详解
Feb 07 Python
基于Tensorflow一维卷积用法详解
May 22 Python
Alpine安装Python3依赖出现的问题及解决方法
Dec 25 Python
Python调用SMTP服务自动发送Email的实现步骤
Feb 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
关于Zend Studio 配色方案插件的介绍
2013/06/24 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
2015/07/28 PHP
PHP的关于变量和日期处理的一些面试题目整理
2015/08/10 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
2017/02/08 PHP
JavaScript中Array 对象相关的几个方法
2006/12/22 Javascript
由document.body和document.documentElement想到的
2009/04/13 Javascript
JSON 教程 json入门学习笔记
2020/09/22 Javascript
js location.replace与location.reload的区别
2010/09/08 Javascript
javascript的数组和常用函数详解
2014/05/09 Javascript
对之前写的jquery分页做下升级
2014/06/19 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
JavaScript &amp; jQuery完美判断图片是否加载完毕
2017/01/08 Javascript
通过npm或yarn自动生成vue组件的方法示例
2019/02/12 Javascript
vue学习笔记之slot插槽用法实例分析
2020/02/29 Javascript
Python中字典和JSON互转操作实例
2015/01/19 Python
python监控进程脚本
2018/04/12 Python
基于MTCNN/TensorFlow实现人脸检测
2018/05/24 Python
Django 拆分model和view的实现方法
2019/08/16 Python
基于python操作ES实例详解
2019/11/16 Python
使用pytorch和torchtext进行文本分类的实例
2020/01/08 Python
Python 字符串池化的前提
2020/07/03 Python
Marc Jacobs官方网站:美国奢侈品牌
2017/08/29 全球购物
C# Debug和Testing相关面试题
2015/10/25 面试题
写给女生的道歉信
2014/01/14 职场文书
宿舍标语大全
2014/06/19 职场文书
法人委托书的范本格式
2014/09/11 职场文书
高一学年自我鉴定范文(3篇)
2014/09/26 职场文书
2014院党委领导班子及其成员群众路线对照检查材料思想汇报
2014/10/04 职场文书
营业员岗位职责范本
2015/04/14 职场文书
三八妇女节致辞
2015/07/31 职场文书
人事任命书范本
2015/09/21 职场文书
如何写好一份优秀的工作总结?
2019/06/21 职场文书
教你使用VS Code的MySQL扩展管理数据库的方法
2022/01/22 MySQL
业余无线电通联Q语
2022/02/18 无线电
分享几个简单MySQL优化小妙招
2022/03/31 MySQL
总结三种用 Python 作为小程序后端的方式
2022/05/02 Python