使用Python-OpenCV消除图像中孤立的小区域操作

 更新时间:2020年07月05日 11:02:26   作者:xiaoxifei  
这篇文章主要介绍了使用Python-OpenCV消除图像中孤立的小区域操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

之前一直使用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中有如下记录

然后使用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

然后,后面的contourArea是用来获取轮廓所包围的面积,threshold是面积阈值,当小于该阈值时认为是孤立小区域,需要去除

最后drawContours是对孤立小区域进行去除的方式,去除操作比较简单,就是往这些区域里面填充为0即可,drawContours的参量可参考如下:

https://docs.opencv.org/3.0-beta/modules/imgproc/doc/drawing_functions.html?highlight=drawcontours

这里,drawContours的第一个参量是输入待处理图像,第二个参量是将要处理的孤立区域轮廓Vector,第三个参量是表示轮廓的坐标,这里为0表示contours的第一个,第四个参量表示填充的数值,这里是integer的情况下则表明是灰度图,填充为1,而最后一个参量为-1,是thickness,表明按照填充方式处理该轮廓围绕的区域

示例如下:

以上这篇使用Python-OpenCV消除图像中孤立的小区域操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解Python 解压缩文件

    详解Python 解压缩文件

    这篇文章主要介绍了Python 解压缩文件,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • 关于python多重赋值的小问题

    关于python多重赋值的小问题

    这篇文章主要给大家介绍了关于python多重赋值的小问题,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • Python中利用Scipy包的SIFT方法进行图片识别的实例教程

    Python中利用Scipy包的SIFT方法进行图片识别的实例教程

    SIFT算法可以检测图片中的局部特征,算法原理相当复杂...但是!Python强大的第三方包Scipy中带有实现SIFT算法的SIFT方法,我们只要拿来用就可以了,下面就为大家带来Python中利用Scipy包的SIFT方法进行图片识别的实例教程.
    2016-06-06
  • python 动态渲染 mysql 配置文件的示例

    python 动态渲染 mysql 配置文件的示例

    这篇文章主要介绍了python 动态渲染 mysql 配置文件的示例,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-11-11
  • 关于Django外键赋值问题详解

    关于Django外键赋值问题详解

    这段时间用django 做程序用到了一对多的关系的操作,下面分享一些心得体会,这篇文章主要给大家介绍了关于Django外键赋值问题的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-08-08
  • Python tkinter制作单机五子棋游戏

    Python tkinter制作单机五子棋游戏

    这篇文章主要介绍了Python tkinter制作单机五子棋游戏,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Python 中开发pattern的string模板(template) 实例详解

    Python 中开发pattern的string模板(template) 实例详解

    这篇文章主要介绍了Python 中开发pattern的string模板(template) 实例详解的相关资料,需要的朋友可以参考下
    2017-04-04
  • python编程Flask框架简单使用教程

    python编程Flask框架简单使用教程

    这篇文章主要为大家介绍了python编程中Flask框架简单使用教程,有需要的朋友可以借鉴参考下希望能够有所帮助,祝大家多多进步早日升职加薪
    2021-11-11
  • Python使用日志模块快速调试代码并记录异常信息

    Python使用日志模块快速调试代码并记录异常信息

    本文详细介绍了Python logging日志模块的使用方法,包括如何在代码中使用logging记录调试信息、如何设置日志级别、如何记录异常信息等。通过本文的指南,读者可以快速学会如何使用logging模块进行调试,并保留有用的日志信息,便于后续排查问题和优化代码
    2023-04-04
  • 用Python中的__slots__缓存资源以节省内存开销的方法

    用Python中的__slots__缓存资源以节省内存开销的方法

    这篇文章主要介绍了用Python中的__slots__通过缓存资源的方式以节省内存开销的方法,且示例代码非常简单,需要的朋友可以参考下
    2015-04-04

最新评论