使用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.7删除文件夹和删除文件代码实例
Dec 18 Python
Python实现将Excel转换为json的方法示例
Aug 05 Python
Python生成8位随机字符串的方法分析
Dec 05 Python
django用户注册、登录、注销和用户扩展的示例
Mar 19 Python
Python处理中文标点符号大集合
May 14 Python
python 反编译exe文件为py文件的实例代码
Jun 27 Python
python自带tkinter库实现棋盘覆盖图形界面
Jul 17 Python
Python 读取用户指令和格式化打印实现解析
Sep 02 Python
pandas 对group进行聚合的例子
Dec 27 Python
python实现猜单词游戏
May 22 Python
Python如何合并多个字典或映射
Jul 24 Python
pytorch锁死在dataloader(训练时卡死)
May 28 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页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
2013/06/03 PHP
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
php有道翻译api调用方法实例
2014/12/22 PHP
php仿微信红包分配算法的实现方法
2016/05/13 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
2021/02/27 PHP
Javascript中的var_dump函数实现代码
2009/09/07 Javascript
javascript对象之内置对象Math使用方法
2010/04/16 Javascript
IE事件对象(The Internet Explorer Event Object)
2012/06/27 Javascript
file模式访问网页时iframe高度自适应解决方案
2013/01/16 Javascript
jquery 新建的元素事件绑定问题解决方案
2014/06/12 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
2014/07/18 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
Vue监听数据对象变化源码
2017/03/09 Javascript
解决vue-cli脚手架打包后vendor文件过大的问题
2018/09/27 Javascript
Angular4.0动画操作实例详解
2019/05/10 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
python 实现堆排序算法代码
2012/06/05 Python
python list语法学习(带例子)
2013/11/01 Python
跟老齐学Python之编写类之三子类
2014/10/11 Python
Python编程实现生成特定范围内不重复多个随机数的2种方法
2017/04/14 Python
python基础学习之如何对元组各个元素进行命名详解
2018/07/12 Python
Python使用MyQR制作专属动态彩色二维码功能
2019/06/04 Python
python3.4+pycharm 环境安装及使用方法
2019/06/13 Python
使用python模拟命令行终端的示例
2019/08/13 Python
法国滑雪假期的专家:Ski Planet
2019/11/02 全球购物
上海方立数码笔试题
2013/10/18 面试题
JavaScript获取当前url根目录(路径)
2014/02/19 面试题
初中同学聚会邀请函
2014/02/03 职场文书
政府会议通知范文
2015/04/15 职场文书
退货证明模板
2015/06/23 职场文书
甜美蛋糕店的创业计划书模板,拿来即用!
2019/08/21 职场文书
redis客户端实现高可用读写分离的方式详解
2021/07/04 Redis
如何利用opencv判断两张图片是否相同详解
2021/07/07 Python
详解pytorch创建tensor函数
2022/03/22 Python
springboot读取nacos配置文件
2022/05/20 Java/Android