使用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获取文件版本信息、公司名和产品名的方法
Oct 05 Python
Python 列表排序方法reverse、sort、sorted详解
Jan 22 Python
Python语言生成水仙花数代码示例
Dec 18 Python
78行Python代码实现现微信撤回消息功能
Jul 26 Python
Python3.5运算符操作实例详解
Apr 25 Python
python  文件的基本操作 菜中菜功能的实例代码
Jul 17 Python
安装docker-compose的两种最简方法
Jul 30 Python
Keras实现将两个模型连接到一起
May 23 Python
keras导入weights方式
Jun 12 Python
Django扫码抽奖平台的配置过程详解
Jan 14 Python
Django后端按照日期查询的方法教程
Feb 28 Python
教你使用Pandas直接核算Excel中快递费用
May 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
深入了解php4(2)--重访过去
2006/10/09 PHP
php5中类的学习
2008/03/28 PHP
PHP下编码转换函数mb_convert_encoding与iconv的使用说明
2009/12/16 PHP
php去掉URL网址中带有PHPSESSID的配置方法
2014/07/08 PHP
PHP面向对象之后期静态绑定功能介绍
2015/05/18 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
2015/07/09 PHP
PHP判断上传文件类型的解决办法
2015/10/20 PHP
WordPress伪静态规则设置代码实例
2020/12/10 PHP
javascript实现的动态文字变换
2007/07/28 Javascript
javascript sudoku 数独智力游戏生成代码
2010/03/27 Javascript
Javascript的常规数组和关联数组对比小结
2012/05/24 Javascript
鼠标放在图片上显示大图的JS代码
2013/03/26 Javascript
JS+CSS实现的经典圆角下拉菜单效果代码
2015/10/21 Javascript
Angularjs实现多个页面共享数据的方式
2016/03/29 Javascript
javascript深拷贝(deepClone)详解
2016/08/24 Javascript
react-router实现按需加载
2017/05/09 Javascript
vue+vux实现移动端文件上传样式
2017/07/28 Javascript
vue router学习之动态路由和嵌套路由详解
2017/09/21 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变opacity实现)
2019/01/24 Javascript
今天,小程序正式支持 SVG
2019/04/20 Javascript
javascript删除数组元素的七个方法示例
2019/09/09 Javascript
分享一款超好用的JavaScript 打包压缩工具
2020/04/26 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
浅谈vue的第一个commit分析
2020/06/08 Javascript
vue穿梭框实现上下移动
2021/01/29 Vue.js
[02:27]刀塔重生降临
2015/10/14 DOTA
[00:38]TI珍贵瞬间系列(二):笑
2020/08/26 DOTA
[01:08:56]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第一场 2月7日
2021/03/11 DOTA
python共享引用(多个变量引用)示例代码
2013/12/04 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
2019/01/30 Python
几个CSS3的flex弹性盒模型布局的简单例子演示
2016/05/12 HTML / CSS
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
莫斯科的韩国化妆品店:Sifo
2019/12/04 全球购物
护理毕业生自我鉴定
2014/02/11 职场文书
七年级语文教学反思
2016/03/03 职场文书
Java 使用类型为Object的变量指向任意类型的对象
2022/04/13 Java/Android