使用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卸载模块的方法汇总
Jun 07 Python
python队列通信:rabbitMQ的使用(实例讲解)
Dec 22 Python
解决Python3中的中文字符编码的问题
Jul 18 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
Jul 26 Python
Django 实现购物车功能的示例代码
Oct 08 Python
利用Python如何实现一个小说网站雏形
Nov 23 Python
Opencv+Python 色彩通道拆分及合并的示例
Dec 08 Python
Python实现微信消息防撤回功能的实例代码
Apr 29 Python
Django分页功能的实现代码详解
Jul 29 Python
python虚拟环境模块venv使用及示例
Mar 04 Python
利用Python将多张图片合成视频的实现
Nov 23 Python
学点简单的Django之第一个Django程序的实现
Feb 24 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 xml文件操作实现代码(二)
2009/03/20 PHP
PHP实现手机归属地查询API接口实现代码
2012/08/27 PHP
thinkphp关于简单的权限判定方法
2017/04/03 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
由prototype_1.3.1进入javascript殿堂-类的初探
2006/11/06 Javascript
JQuery 学习笔记 选择器之一
2009/07/23 Javascript
Jquery优化效率 提升性能解决方案
2010/09/06 Javascript
初窥JQuery-Jquery简介 入门了解篇
2010/11/25 Javascript
js解析与序列化json数据(一)json.stringify()的基本用法
2013/02/01 Javascript
jquery 遍历数组 each 方法详解
2016/05/25 Javascript
微信小程序(应用号)开发新闻客户端实例
2016/10/24 Javascript
Angular ui.bootstrap.pagination分页
2017/01/20 Javascript
Angular如何引入第三方库的方法详解
2017/07/13 Javascript
解决vue中虚拟dom,无法实时更新的问题
2018/09/15 Javascript
JavaScript箭头函数中的this详解
2019/06/19 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
[01:07:17]EG vs Optic Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
在Python编程过程中用单元测试法调试代码的介绍
2015/04/02 Python
python直接访问私有属性的简单方法
2016/07/25 Python
使用Python实现将list中的每一项的首字母大写
2019/06/11 Python
在PyTorch中Tensor的查找和筛选例子
2019/08/18 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
澳大利亚便宜隐形眼镜购买网站:QUICKLENS Australia
2018/10/06 全球购物
英国工作场所设备购买网站:Slingsby
2019/05/03 全球购物
毕业自荐书
2013/12/09 职场文书
幼儿园新学期寄语
2014/01/18 职场文书
如何写好建议书
2014/03/13 职场文书
2014年五四青年节演讲稿范文
2014/04/22 职场文书
爱牙日活动总结
2014/08/29 职场文书
不服从上级领导安排的检讨书
2014/09/14 职场文书
个人年终总结结尾
2015/03/06 职场文书
检讨书格式
2019/04/25 职场文书
接触艺术对孩子学习思维有益
2019/08/06 职场文书
Python实现列表拼接和去重的三种方式
2021/07/02 Python
MySQL 数据库范式化设计理论
2022/04/22 MySQL