使用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下的twisted框架入门指引
Apr 15 Python
在Django的上下文中设置变量的方法
Jul 20 Python
python3批量删除豆瓣分组下的好友的实现代码
Jun 07 Python
Python 3.7新功能之dataclass装饰器详解
Apr 21 Python
利用python对Excel中的特定数据提取并写入新表的方法
Jun 14 Python
Python数据可视化教程之Matplotlib实现各种图表实例
Jan 13 Python
正确理解Python中if __name__ == '__main__'
Jan 24 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
Aug 26 Python
Python如何使用BeautifulSoup爬取网页信息
Nov 26 Python
Python如何爬取b站热门视频并导入Excel
Aug 10 Python
python基础学习之生成器与文件系统知识总结
May 25 Python
Python中的turtle画箭头,矩形,五角星
Mar 16 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使用json_encode对变量json编码
2014/04/07 PHP
PHP统计当前在线用户数实例讲解
2015/10/21 PHP
PHP7之Mongodb API使用详解
2015/12/26 PHP
php实现当前页面点击下载文件的简单方法
2016/09/22 PHP
PHP使用imagick扩展实现合并图像的方法
2017/04/25 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
2018/05/12 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
2019/03/01 PHP
基于JQuery框架的AJAX实例代码
2009/11/03 Javascript
给jqGrid数据行添加修改和删除操作链接(之一)
2011/11/04 Javascript
jQuery $.data()方法使用注意细节
2012/12/31 Javascript
JavaScript中使用typeof运算符需要注意的几个坑
2014/11/08 Javascript
jQuery插件slicebox实现3D动画图片轮播切换特效
2015/04/12 Javascript
JS中Location使用详解
2015/05/12 Javascript
JS中sort函数排序用法实例分析
2016/06/16 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
VueJS全面解析
2016/11/10 Javascript
Bootstrap基本组件学习笔记之导航(10)
2016/12/07 Javascript
jQuery图片缩放插件smartZoom使用实例详解
2017/08/25 jQuery
JavaScript如何处理移动端拍摄图片旋转问题
2019/11/16 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
[08:40]Navi Vs Newbee
2018/06/07 DOTA
Python实现高斯函数的三维显示方法
2018/12/29 Python
python 多线程重启方法
2019/02/18 Python
Python pandas DataFrame操作的实现代码
2019/06/21 Python
python 将dicom图片转换成jpg图片的实例
2020/01/13 Python
QML实现钟表效果
2020/06/02 Python
详解CSS3实现响应式手风琴效果
2020/06/10 HTML / CSS
快速实现一个简单的canvas迷宫游戏的示例
2018/07/04 HTML / CSS
泰国最新活动和优惠:Megatix
2020/05/07 全球购物
商务英语专业毕业生自荐信
2013/11/05 职场文书
行政助理工作职责范本
2014/03/04 职场文书
2014年单位法制宣传日活动总结
2014/11/01 职场文书
小学教师党员承诺书
2015/04/27 职场文书
导游词之新疆-喀纳斯
2019/10/10 职场文书
Pycharm连接远程服务器并远程调试的全过程
2021/06/24 Python