使用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获取CPU、内存和硬盘等windowns系统信息的2个例子
Apr 15 Python
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
May 06 Python
python中itertools模块zip_longest函数详解
Jun 12 Python
python 输出所有大小写字母的方法
Jan 02 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
Mar 05 Python
Pandas的read_csv函数参数分析详解
Jul 02 Python
Python检查 云备份进程是否正常运行代码实例
Aug 22 Python
深入了解Python在HDA中的应用
Sep 05 Python
Python实现TCP通信的示例代码
Sep 09 Python
通过实例解析python subprocess模块原理及用法
Oct 10 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
Jan 15 Python
Python实现DBSCAN聚类算法并样例测试
Jun 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
swfupload 多文件上传实现代码
2008/08/27 PHP
设置php页面编码的两种方法示例介绍
2014/03/03 PHP
PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
2019/02/25 PHP
Javascript面向对象扩展库代码分享
2012/03/27 Javascript
JS复制内容到剪切板的实例代码(兼容IE与火狐)
2013/11/19 Javascript
js实现从数组里随机获取元素
2015/01/12 Javascript
jQuery入门之层次选择器实例简析
2015/12/11 Javascript
简单谈谈javascript中this的隐式绑定
2016/02/22 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
Easyui的组合框的取值与赋值
2016/10/28 Javascript
js实现炫酷的左右轮播图
2017/01/18 Javascript
JavaScript上传文件时不用刷新页面方法总结(推荐)
2017/08/15 Javascript
jqueryUI tab标签页代码分享
2017/10/09 jQuery
jQuery EasyUI 折叠面板accordion的使用实例(分享)
2017/12/25 jQuery
微信小程序实现滚动消息通知
2018/02/02 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
了解javascript中变量及函数的提升
2019/05/27 Javascript
微信小程序实现一个简单swiper代码实例
2019/12/30 Javascript
Vue中component标签解决项目组件化操作
2020/09/04 Javascript
OpenLayers3实现对地图的基本操作
2020/09/28 Javascript
[01:25]DOTA2自定义游戏灵园鬼域等你踏足
2015/10/30 DOTA
[49:13]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第一局
2016/02/27 DOTA
python测试驱动开发实例
2014/10/08 Python
import的本质解析
2017/10/30 Python
Python 读取指定文件夹下的所有图像方法
2018/04/27 Python
python如何求解两数的最大公约数
2018/09/27 Python
python实现求特征选择的信息增益
2018/12/18 Python
Python中pymysql 模块的使用详解
2019/08/12 Python
Pandas 缺失数据处理的实现
2019/11/04 Python
pyhton中__pycache__文件夹的产生与作用详解
2019/11/24 Python
python 在threading中如何处理主进程和子线程的关系
2020/04/25 Python
行政总监岗位职责
2013/12/05 职场文书
绿色小区申报材料
2014/08/22 职场文书
学前教育专业求职信
2014/09/02 职场文书
2015年暑期社会实践活动总结
2015/03/27 职场文书
Nginx工作原理和优化总结。
2021/04/02 Servers