使用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程序
Apr 04 Python
c++生成dll使用python调用dll的方法
Jan 20 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
Feb 23 Python
Python操作MySQL模拟银行转账
Mar 12 Python
django1.11.1 models 数据库同步方法
May 30 Python
Python3调用百度AI识别图片中的文字功能示例【测试可用】
Mar 13 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
Jun 26 Python
Django中的用户身份验证示例详解
Aug 07 Python
python实现横向拼接图片
Mar 23 Python
python+flask编写一个简单的登录接口
Nov 13 Python
Python爬虫之Selenium警告框(弹窗)处理
Dec 04 Python
python字典的元素访问实例详解
Jul 21 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
GD输出汉字的函数的分析
2006/10/09 PHP
PHP绕过open_basedir限制操作文件的方法
2018/06/10 PHP
PHP模糊查询技术实例分析【附源码下载】
2019/03/07 PHP
js 数组实现一个类似ruby的迭代器
2009/10/27 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
Google (Local) Search API的简单使用介绍
2013/11/28 Javascript
jQuery获取和设置表单元素的方法
2014/02/14 Javascript
javascript基于HTML5 canvas制作画箭头组件
2014/06/25 Javascript
JQuery调用绑定click事件的3种写法
2015/03/28 Javascript
jQuery实现首页顶部可伸缩广告特效代码
2015/04/15 Javascript
JavaScript中for循环的使用详解
2015/06/03 Javascript
jQuery.trim() 函数及trim()用法详解
2015/10/26 Javascript
javascript中Date对象应用之简易日历实现
2016/07/12 Javascript
JavaScript生成.xls文件的代码
2016/12/22 Javascript
详解IWinter 一个路由转控制器的 Nodejs 库
2017/11/15 NodeJs
vue forEach循环数组拿到自己想要的数据方法
2018/09/21 Javascript
js中位运算的运用实例分析
2018/12/11 Javascript
[37:50]VP vs TNC Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
Python实现代码统计工具(终极篇)
2016/07/04 Python
Python 操作文件的基本方法总结
2017/08/10 Python
Python基于正则表达式实现文件内容替换的方法
2017/08/30 Python
Python实现简单求解给定整数的质因数算法示例
2018/03/25 Python
完美解决安装完tensorflow后pip无法使用的问题
2018/06/11 Python
对python中词典的values值的修改或新增KEY详解
2019/01/20 Python
对python 树状嵌套结构的实现思路详解
2019/08/09 Python
Python+Appium实现自动化测试的使用步骤
2020/03/24 Python
斯凯奇澳大利亚官网:SKECHERS澳大利亚
2018/03/31 全球购物
Crabtree & Evelyn英国官网:瑰珀翠护手霜、香水、沐浴和身体护理
2018/04/26 全球购物
ECCO英国官网:丹麦鞋履品牌
2019/09/03 全球购物
大学生创业感言
2014/01/25 职场文书
服务理念标语
2014/06/18 职场文书
共产党员批评与自我批评
2014/10/15 职场文书
2014年居委会工作总结
2014/12/09 职场文书
幼师自荐信范文
2015/03/06 职场文书
工作简历的自我评价
2019/05/16 职场文书
python opencv旋转图片的使用方法
2021/06/04 Python