使用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 相关文章推荐
Python2.X/Python3.X中urllib库区别讲解
Dec 19 Python
Python3 实现随机生成一组不重复数并按行写入文件
Apr 09 Python
python删除文本中行数标签的方法
May 31 Python
Python实现求解一元二次方程的方法示例
Jun 20 Python
Django框架使用mysql视图操作示例
May 15 Python
详解python中*号的用法
Oct 21 Python
使用python快速在局域网内搭建http传输文件服务的方法
Nov 14 Python
Python3连接Mysql8.0遇到的问题及处理步骤
Feb 17 Python
使用python接受tgam的脑波数据实例
Apr 09 Python
Python参数传递机制传值和传引用原理详解
May 22 Python
解决python 虚拟环境删除包无法加载的问题
Jul 13 Python
Python 快速验证代理IP是否有效的方法实现
Jul 15 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
一些操作和快捷键的理解和讨论
2020/03/04 星际争霸
php通过curl模拟登陆DZ论坛
2015/05/11 PHP
thinkPHP内置字符串截取函数用法详解
2016/11/15 PHP
Laravel 前端资源配置教程
2019/10/18 PHP
javascript显示选择目录对话框的代码
2008/11/10 Javascript
javascript new 需不需要继续使用
2009/07/02 Javascript
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
jQuery对象与DOM对象之间的转换方法
2010/04/15 Javascript
jquery选择器(常用选择器说明)
2010/09/28 Javascript
js页面滚动时层智能浮动定位实现(jQuery/MooTools)
2011/08/23 Javascript
通过Javascript将数据导出到外部Excel文档的函数代码
2012/06/15 Javascript
jQuery数据缓存功能的实现思路及简单模拟
2013/05/27 Javascript
jQuery DOM删除节点操作指南
2015/03/03 Javascript
jquery实现右键菜单插件
2015/03/29 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
Bootstrap项目实战之首页内容介绍(全)
2016/04/25 Javascript
Highcharts学习之坐标轴
2016/08/02 Javascript
Angular的$http的ajax的请求操作(推荐)
2017/01/10 Javascript
Bootstrap Multiselect 常用组件实现代码
2017/07/09 Javascript
JS实现电商放大镜效果
2017/08/24 Javascript
vue2.0 根据状态值进行样式的改变展示方法
2018/03/13 Javascript
Webpack 4.x搭建react开发环境的方法步骤
2018/08/15 Javascript
微信 jssdk 签名错误invalid signature的解决方法
2019/01/14 Javascript
一次微信小程序内地图的使用实战记录
2019/09/09 Javascript
Vue实现boradcast和dispatch的示例
2020/11/13 Javascript
Python编写电话薄实现增删改查功能
2016/05/07 Python
对python中的logger模块全面讲解
2018/04/28 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
TensorFlow中如何确定张量的形状实例
2020/06/23 Python
德国自然时尚和有机产品购物网站:Waschbär
2019/05/29 全球购物
extern在函数声明中是什么意思
2014/01/19 面试题
银行实习生的自我评价
2013/12/09 职场文书
党员学习十八大感想
2014/01/17 职场文书
大学生就业求职信
2014/06/12 职场文书
2016年学校安全教育月活动总结
2016/04/06 职场文书
Python Pandas解析读写 CSV 文件
2022/04/11 Python