使用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交换变量
Sep 06 Python
python模拟登陆Tom邮箱示例分享
Jan 13 Python
Python实现根据指定端口探测服务器/模块部署的方法
Aug 25 Python
python中的多重继承实例讲解
Sep 28 Python
Python程序退出方式小结
Dec 09 Python
python+selenium select下拉选择框定位处理方法
Aug 24 Python
Python单元测试与测试用例简析
Nov 09 Python
python实现while循环打印星星的四种形状
Nov 23 Python
关于Pytorch的MLP模块实现方式
Jan 07 Python
Python批量处理csv并保存过程解析
May 16 Python
Python如何读写CSV文件
Aug 13 Python
python切割图片的示例
Nov 12 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/04/24 PHP
location.search在客户端获取Url参数的方法
2010/06/08 Javascript
JS子父窗口互相操作取值赋值的方法介绍
2013/05/11 Javascript
JavaScript使用slice函数获取数组部分元素的方法
2015/04/06 Javascript
Vue.js每天必学之Class与样式绑定
2016/09/05 Javascript
JavaScript实现旋转轮播图
2020/08/18 Javascript
基于vue-cli配置lib-flexible + rem实现移动端自适应
2017/12/26 Javascript
vue2.0实现前端星星评分功能组件实例代码
2018/02/12 Javascript
浅谈node中的cluster集群
2018/06/02 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
2019/08/27 Javascript
用JS实现选项卡
2020/03/23 Javascript
用vue设计一个日历表
2020/12/03 Vue.js
[00:37]DOTA2上海特级锦标赛 Secert 战队宣传片
2016/03/03 DOTA
Python单链表简单实现代码
2016/04/27 Python
详解Python的collections模块中的deque双端队列结构
2016/07/07 Python
python导出hive数据表的schema实例代码
2018/01/22 Python
python判断文件是否存在,不存在就创建一个的实例
2019/02/18 Python
python面向对象之类属性和类方法案例分析
2019/12/30 Python
Jupyter打开图形界面并画出正弦函数图像实例
2020/04/24 Python
Python内置函数locals和globals对比
2020/04/28 Python
python爬取youtube视频的示例代码
2021/03/03 Python
Oroton中国官网:澳洲知名奢侈配饰品牌
2017/03/26 全球购物
Ibatis的核心配置文件都有什么
2014/09/08 面试题
计算机网络毕业生自荐信
2013/10/01 职场文书
总经理秘书的岗位职责
2013/12/27 职场文书
简历的个人自我评价范文
2014/01/03 职场文书
学习十八大报告感言
2014/02/28 职场文书
中国梦我的梦演讲稿
2014/04/23 职场文书
小学语文教研活动总结
2014/07/01 职场文书
大学生党性分析材料
2014/12/19 职场文书
Python 文本滚动播放器的实现代码
2021/04/25 Python
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python
Oracle 死锁的检测查询及处理
2021/09/25 Oracle
MySQL定时备份数据库(全库备份)的实现
2021/09/25 MySQL
MongoDB修改oplog大小的四种方法
2022/04/11 MongoDB