使用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自动zip压缩目录的方法
Jun 28 Python
在Python中移动目录结构的方法
Jan 31 Python
Python模拟登陆实现代码
Jun 14 Python
python3实现爬取淘宝美食代码分享
Sep 23 Python
详解Django-auth-ldap 配置方法
Dec 10 Python
浅谈Python接口对json串的处理方法
Dec 19 Python
简单了解Django ContentType内置组件
Jul 23 Python
Python 仅获取响应头, 不获取实体的实例
Aug 21 Python
python多线程并发及测试框架案例
Oct 15 Python
使用TensorFlow-Slim进行图像分类的实现
Dec 31 Python
基于MSELoss()与CrossEntropyLoss()的区别详解
Jan 02 Python
从零开始的TensorFlow+VScode开发环境搭建的步骤(图文)
Aug 31 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初学者头疼问题总结
2006/10/09 PHP
php数据库连接
2006/10/09 PHP
PHP导入Excel到MySQL的方法
2011/04/23 PHP
php中时间函数date及常用的时间计算
2017/05/12 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
TP5框架请求响应参数实例分析
2019/10/17 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
Jquery仿淘宝京东多条件筛选可自行结合ajax加载示例
2013/08/28 Javascript
JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)
2014/09/13 Javascript
Javascript中的getUTCDay()方法使用详解
2015/06/10 Javascript
Easyui在treegrid添加控件的实现方法
2017/06/23 Javascript
vue2.0获取鼠标位置的方法
2018/09/13 Javascript
js实现登录拖拽窗口
2020/02/10 Javascript
Ant Design Vue table中列超长显示...并加提示语的实例
2020/10/31 Javascript
[02:01]2018完美盛典-开场舞《双子星》
2018/12/16 DOTA
python实现的一只从百度开始不断搜索的小爬虫
2013/08/13 Python
python判断windows隐藏文件的方法
2014/03/21 Python
Python 类与元类的深度挖掘 I【经验】
2016/05/06 Python
Python+Turtle动态绘制一棵树实例分享
2018/01/16 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
Python3 tkinter 实现文件读取及保存功能
2019/09/12 Python
python对验证码降噪的实现示例代码
2019/11/12 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
django的模型类管理器——数据库操作的封装详解
2020/04/01 Python
Python使用Chrome插件实现爬虫过程图解
2020/06/09 Python
HTML5不支持标签和新增标签详解
2016/06/27 HTML / CSS
连卡佛中国官网:Lane Crawford中文站
2018/01/27 全球购物
建筑公司文秘岗位职责
2013/11/29 职场文书
过程装备与控制工程专业个人的求职信
2013/12/01 职场文书
《傅雷家书》教学反思
2014/04/20 职场文书
学校爱心捐款倡议书
2014/05/13 职场文书
毕业实习指导教师评语
2014/12/31 职场文书
2016北大自主招生自荐信模板
2016/01/28 职场文书
多人股份制合作协议书
2016/03/19 职场文书
python实现简单的名片管理系统
2021/04/26 Python
PyMongo 查询数据的实现
2021/06/28 Python