使用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中的包和模块实例
Nov 22 Python
python基于xmlrpc实现二进制文件传输的方法
Jun 02 Python
Python中基本的日期时间处理的学习教程
Oct 16 Python
如何用itertools解决无序排列组合的问题
May 18 Python
pytorch cnn 识别手写的字实现自建图片数据
May 20 Python
Python爬虫包BeautifulSoup实例(三)
Jun 17 Python
opencv python 图像去噪的实现方法
Aug 31 Python
python scipy求解非线性方程的方法(fsolve/root)
Nov 12 Python
Python3实现的判断回文链表算法示例
Mar 08 Python
利用Python代码实现一键抠背景功能
Dec 29 Python
Django实现celery定时任务过程解析
Apr 21 Python
python 破解加密zip文件的密码
Apr 22 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构造方法中析构方法在继承中的表现
2016/04/12 PHP
PHP高精确度运算BC函数库实例详解
2017/08/15 PHP
PHP抽象类与接口的区别实例详解
2019/05/09 PHP
javaScript同意等待代码实现心得
2011/01/01 Javascript
jQuery动画效果-fadeIn fadeOut淡入浅出示例代码
2013/08/28 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
jQuery动态修改超链接地址的方法
2015/02/13 Javascript
异步安全加载javascript文件的方法
2015/07/21 Javascript
JS实现图片的不间断连续滚动的简单实例
2016/06/03 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
css和js实现弹出登录居中界面完整代码
2017/11/26 Javascript
vue中element 上传功能的实现思路
2018/07/06 Javascript
深入浅析Node环境和浏览器的区别
2018/08/14 Javascript
深入分析jQuery.one() 函数
2020/06/03 jQuery
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
Vant 在vue-cli 4.x中按需加载操作
2020/11/05 Javascript
[00:43]拉比克至宝魔导师密钥展示
2018/12/20 DOTA
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
python 字符串split的用法分享
2013/03/23 Python
详解Python 数据库 (sqlite3)应用
2016/12/07 Python
基于Python的关键字监控及告警
2017/07/06 Python
python-opencv在有噪音的情况下提取图像的轮廓实例
2017/08/30 Python
python使用turtle库与random库绘制雪花
2018/06/22 Python
Python 20行简单实现有道在线翻译的详解
2019/05/15 Python
Python统计分析模块statistics用法示例
2019/09/06 Python
Kneipp克奈圃美国官网:德国百年精油配方的传承
2018/02/07 全球购物
求职推荐信
2013/10/28 职场文书
跟单文员的岗位职责
2013/11/14 职场文书
机械电子工程毕业生自荐信
2013/11/23 职场文书
创业计划书六个要素
2013/12/26 职场文书
《沉香救母》教学反思
2014/04/19 职场文书
四风剖析查摆对照检查材料思想汇报
2014/09/24 职场文书
幼儿园校车安全责任书
2015/05/08 职场文书
《童年的发现》教学反思
2016/02/18 职场文书
基于angular实现树形二级表格
2021/10/16 Javascript
Innodb存储引擎中的后台线程详解
2022/04/03 MySQL