使用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 元组(Tuple)操作详解
Mar 11 Python
对Python新手编程过程中如何规避一些常见问题的建议
Apr 01 Python
Python函数中的函数(闭包)用法实例
Mar 15 Python
python实现稀疏矩阵示例代码
Jun 09 Python
python书籍信息爬虫实例
Mar 19 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
Apr 21 Python
Python之读取TXT文件的方法小结
Apr 27 Python
python顺序执行多个py文件的方法
Jun 29 Python
Python3 解决读取中文文件txt编码的问题
Dec 20 Python
如何基于python3和Vue实现AES数据加密
Mar 27 Python
python 删除excel表格重复行,数据预处理操作
Jul 06 Python
python中 .npy文件的读写操作实例
Apr 14 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 编写的 25个游戏脚本
2009/05/11 PHP
phpmail类发送邮件函数代码
2012/02/20 PHP
深入理解require与require_once与include以及include_once的区别
2013/06/05 PHP
memcache命令启动参数中文解释
2014/01/13 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
2014/07/25 PHP
PHP中__autoload和Smarty冲突的简单解决方法
2016/04/08 PHP
使用laravel根据用户类型来显示或隐藏字段
2019/10/17 PHP
关于laravel框架中的常用目录路径函数
2019/10/23 PHP
通过Mootools 1.2来操纵HTML DOM元素
2009/09/15 Javascript
Wordpress ThickBox 添加“查看原图”效果代码
2010/12/11 Javascript
JavaScript中valueOf函数与toString方法深入理解
2012/12/02 Javascript
将文本输入框内容加入表中的js代码
2013/08/18 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
2015/08/21 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
javascript 动态样式添加的简单实现
2016/10/11 Javascript
纯JS打造网页中checkbox和radio的美化效果
2016/10/13 Javascript
Vue实现选择城市功能
2017/05/27 Javascript
微信小程序获取手机系统信息的方法【附源码下载】
2017/12/07 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
Nodejs把接收图片base64格式保存为文件存储到服务器上
2018/09/26 NodeJs
PHP实现基于Redis的MessageQueue队列封装操作示例
2019/02/02 Javascript
原生js实现贪吃蛇游戏
2020/10/26 Javascript
JavaScript事件概念详解(区分静态注册和动态注册)
2021/02/05 Javascript
基于python时间处理方法(详解)
2017/08/14 Python
python中的迭代和可迭代对象代码示例
2017/12/27 Python
Python3结合Dlib实现人脸识别和剪切
2018/01/24 Python
tensorflow实现KNN识别MNIST
2018/03/12 Python
python 动态调用函数实例解析
2019/10/21 Python
Python requests上传文件实现步骤
2020/09/15 Python
菲律宾票务网站:StubHub菲律宾
2018/04/21 全球购物
中专毕业生的自我鉴定
2013/12/01 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
抗洪救灾标语
2014/10/08 职场文书
2015年春训学习心得体会范文
2015/03/09 职场文书
2019事业单位个人工作总结范文
2019/08/26 职场文书
Python制作表白爱心合集
2022/01/22 Python