使用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中itertools模块用法详解
Sep 25 Python
Python构造自定义方法来美化字典结构输出的示例
Jun 16 Python
基于Python Numpy的数组array和矩阵matrix详解
Apr 04 Python
Numpy数组转置的两种实现方法
Apr 17 Python
使用Selenium破解新浪微博的四宫格验证码
Oct 19 Python
在python plt图表中文字大小调节的方法
Jul 08 Python
Django框架创建项目的方法入门教程
Nov 04 Python
Python语言异常处理测试过程解析
Jan 08 Python
Python configparser模块常用方法解析
May 22 Python
Python虚拟环境的创建和包下载过程分析
Jun 19 Python
python process模块的使用简介
May 14 Python
pytorch 6 batch_train 批训练操作
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
微信扫描二维码登录网站代码示例
2013/12/30 PHP
ThinkPHP文件上传实例教程
2014/08/22 PHP
php curl 获取https请求的2种方法
2015/04/27 PHP
php简单处理XML数据的方法示例
2017/05/19 PHP
javascript中的几个运算符
2007/06/29 Javascript
node.js实现端口转发
2016/04/14 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
2016/10/09 Javascript
Web 开发中Ajax的Session 超时处理方法
2017/01/19 Javascript
vue 中自定义指令改变data中的值
2017/06/02 Javascript
WebPack配置vue多页面的技巧
2018/05/15 Javascript
微信小程序实现禁止分享代码实例
2019/10/19 Javascript
[54:53]完美世界DOTA2联赛PWL S2 GXR vs PXG 第二场 11.18
2020/11/18 DOTA
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
2014/06/25 Python
Python获取linux主机ip的简单实现方法
2016/04/18 Python
详解Python中where()函数的用法
2018/03/27 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
2018/12/10 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
python实现图片上添加图片
2019/11/26 Python
python 浅谈serial与stm32通信的编码问题
2019/12/18 Python
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
canvas画图被放大且模糊的解决方法
2020/08/11 HTML / CSS
加拿大在线隐形眼镜和眼镜店:VisionPros
2019/10/06 全球购物
劳动模范事迹材料
2014/01/19 职场文书
违纪检讨书2000字
2014/02/08 职场文书
利群广告词
2014/03/20 职场文书
共产党员承诺书
2014/03/25 职场文书
小学作文评语大全
2014/04/21 职场文书
青春无悔演讲稿
2014/05/08 职场文书
秋季运动会广播稿(30篇)
2014/09/13 职场文书
服务整改报告
2014/11/06 职场文书
居委会工作总结2015
2015/05/18 职场文书
七年级语文教学反思
2016/03/03 职场文书
laravel添加角色和模糊搜索功能的实现代码
2021/06/22 PHP
关于vue-router-link选择样式设置
2022/04/30 Vue.js