使用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中规范定义命名空间的一些建议
Jun 04 Python
python模块之re正则表达式详解
Feb 03 Python
Python基于OpenCV实现视频的人脸检测
Jan 23 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
Jul 26 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
Oct 17 Python
python学生信息管理系统(初级版)
Oct 17 Python
python批量从es取数据的方法(文档数超过10000)
Dec 27 Python
在python中,使用scatter绘制散点图的实例
Jul 03 Python
python实现飞机大战小游戏
Nov 08 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
Dec 06 Python
使用Python获取当前工作目录和执行命令的位置
Mar 09 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
Jun 30 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
CodeIgniter使用phpcms模板引擎
2013/11/12 PHP
PHP图像处理之imagecreate、imagedestroy函数介绍
2014/11/19 PHP
微信公众平台实现获取用户OpenID的方法
2015/04/15 PHP
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
jQuery弹出层插件简化版代码下载
2008/10/16 Javascript
jquery左边浮动到一定位置时显示返回顶部按钮
2014/06/05 Javascript
JavaScript字符串对象replace方法实例(用于字符串替换或正则替换)
2014/10/16 Javascript
jQuery封装的tab选项卡插件分享
2015/06/16 Javascript
javascript实现unicode与ASCII相互转换的方法
2015/12/10 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
JavaScript实现的鼠标响应颜色渐变效果完整实例
2017/02/18 Javascript
javascript实现二叉树遍历的代码
2017/06/08 Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
2017/10/11 Javascript
微信小程序实现循环动画效果
2018/07/16 Javascript
详解ES6中的 Set Map 数据结构学习总结
2018/11/06 Javascript
微信小程序自定义模态弹窗组件详解
2019/12/24 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
element 动态合并表格的步骤
2020/12/31 Javascript
如何利用JavaScript编写一个格斗小游戏
2021/01/06 Javascript
Python实现全排列的打印
2018/08/18 Python
关于python列表增加元素的三种操作方法
2018/08/22 Python
Python求均值,方差,标准差的实例
2019/06/29 Python
使用pip安装python库的多种方式
2019/07/31 Python
对Django 转发和重定向的实例详解
2019/08/06 Python
python爬虫 urllib模块url编码处理详解
2019/08/20 Python
使用Python函数进行模块化的实现
2019/11/15 Python
python使用rsa非对称加密过程解析
2019/12/28 Python
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
python爬取微博评论的实例讲解
2021/01/15 Python
CSS3模拟IOS滑动开关效果
2016/09/28 HTML / CSS
Jack Rogers官网:美国经典的女性鞋靴品牌
2019/09/04 全球购物
手工制作的意大利皮革运动鞋:KOIO
2020/01/05 全球购物
班级寄语大全
2014/04/10 职场文书
房屋买卖委托书格式范本格式
2014/10/13 职场文书
2016党员干部廉洁自律心得体会
2016/01/13 职场文书
使用 JavaScript 制作页面效果
2021/04/21 Javascript