使用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进阶教程之异常处理
Aug 30 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
Mar 11 Python
python中scikit-learn机器代码实例
Aug 05 Python
Python调用C++,通过Pybind11制作Python接口
Oct 16 Python
python使用magic模块进行文件类型识别方法
Dec 08 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
May 28 Python
Python实现性能自动化测试竟然如此简单
Jul 30 Python
Python使用pycharm导入pymysql教程
Sep 16 Python
python 绘制场景热力图的示例
Sep 23 Python
Python关于拓扑排序知识点讲解
Jan 04 Python
只用20行Python代码实现屏幕录制功能
Jun 02 Python
Python3接口性能测试实例代码
Jun 20 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
完善CodeIgniter在IDE中代码提示功能的方法
2014/07/19 PHP
PHP自动重命名文件实现方法
2014/11/04 PHP
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
JS滚轮事件onmousewheel使用介绍
2013/11/01 Javascript
js打开新窗口方法整理
2014/02/17 Javascript
js取得html iframe中的元素和变量值
2014/06/30 Javascript
js学习之----深入理解闭包
2016/11/21 Javascript
如何用JS/HTML将时间戳转换为“xx天前”的形式
2017/02/06 Javascript
浅谈Vue.js 1.x 和 2.x 实例的生命周期
2017/07/25 Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
2017/10/25 Javascript
jquery弹窗时禁止body滚动条滚动的例子
2019/09/21 jQuery
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
2019最新21个MySQL高频面试题介绍
2020/02/06 Javascript
javascript实现拖拽碰撞检测
2020/03/12 Javascript
Vue中通过vue-router实现命名视图的问题
2020/04/23 Javascript
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
Vue封装全局过滤器Filters的步骤
2020/09/16 Javascript
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
python求众数问题实例
2014/09/26 Python
Python中使用语句导入模块或包的机制研究
2015/03/30 Python
简单介绍Python的轻便web框架Bottle
2015/04/08 Python
Python3写入文件常用方法实例分析
2015/05/22 Python
使用Python写CUDA程序的方法
2017/03/27 Python
分享一下如何编写高效且优雅的 Python 代码
2017/09/07 Python
Python程序运行原理图文解析
2018/02/10 Python
使用numpy和PIL进行简单的图像处理方法
2018/07/02 Python
Selenium的使用详解
2018/10/19 Python
pycharm 取消默认的右击运行unittest的方法
2018/11/29 Python
python中yield的用法详解
2021/01/13 Python
介绍一下Mysql的存储引擎
2015/02/12 面试题
食堂厨师岗位职责
2014/08/25 职场文书
2014年减负工作总结
2014/12/10 职场文书
公司员工辞职信范文
2015/05/12 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
SQL Server删除表中的重复数据
2022/05/25 SQL Server
教你nginx跳转配置的四种方式
2022/07/07 Servers