OpenCV 通过计算连通域面积过滤面积小的区域–Python

这篇具有很好参考价值的文章主要介绍了OpenCV 通过计算连通域面积过滤面积小的区域–Python。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

代码参考:https://blog.csdn.net/u014264373/article/details/119486850

通过卷积神经网络预测图像的分割结果时,会发现分割外部出现了小面积的连通域。

常识告诉我们,这么小的物体一定不是我们的分割目标,因此,我们通过后处理的方法把它过滤掉,可以提高分割准确度。

这种小面积的图形,可以使用cv2.connectedComponentsWithStats的连通域统计分析方法。

cv2.connectedComponentsWithStats

函数:connectedComponentsWithStats(image, connectivity=8, cv2.CV_32S)
功能:求得最大连通域。
输入:假如image为128x128大小的图片,有7个连通域。
返回
num_labels:连通域个数,此处为7;
labels:大小128x128,标记图,图中不同连通域使用不同的标记(当前像素是第几个轮廓),和原图宽高一致;
stats:大小7x5,每行5个数分别对应各个轮廓的x,y,width,height和面积。注意0的区域标识的是background;
centroids:大小7x2,分别对应各个轮廓的中心点。

此时可比较stats中各连通域的面积与阈值面积(此处取平均面积area_avg),保留大于阈值的面积即可。

import numpy as np
import cv2 as cv

# 加载图片
img = cv.imread('image_name.png')
# 灰度化
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 二值化
ret, thresh = cv.threshold(img_gray, 127, 255, cv.THRESH_BINARY)
# 寻找连通域
num_labels, labels, stats, centroids = cv.connectedComponentsWithStats(thresh, connectivity=8)

# 计算平均面积
areas = list()
for i in range(num_labels):
    areas.append(stats[i][-1])
    print("轮廓%d的面积:%d" % (i, stats[i][-1]))

area_avg = np.average(areas[1:-1])
print("轮廓平均面积:", area_avg)

# 筛选超过平均面积的连通域
image_filtered = np.zeros_like(img)
for (i, label) in enumerate(np.unique(labels)):
    # 如果是背景,忽略
    if label == 0:
        continue
    if stats[i][-1] > area_avg :
        image_filtered[labels == i] = 255

cv.imshow("image_filtered", image_filtered)
cv.imshow("img", img)
cv.waitKey()
cv.destroyAllWindows()




OpenCV 通过计算连通域面积过滤面积小的区域–Python原图共有7个连通域(包括6个前景+1个背景)
OpenCV 通过计算连通域面积过滤面积小的区域–Python过滤掉面积小于平均面积的连通域

产出不易,喜欢的话点个赞吧~~文章来源地址https://www.toymoban.com/news/detail-475849.html

到了这里,关于OpenCV 通过计算连通域面积过滤面积小的区域–Python的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机视觉任务图像预处理之去除图像中的背景区域-------使用连通域分析算法(包含完整代码)

    通过连通域分析算法能够找到最大的连通域,即图片的主体部分,然后保存该连通域的最小外接矩阵,即可去除掉无关的背景区域 更多图像预处理操作工具集包含在这个github仓库中

    2024年02月06日
    浏览(37)
  • opencv报错cv2.error: OpenCV(4.8.0) D:aopencv-pythonopencv-pythonopencvmodulescoresrcalloc.cpp:

    opencv报错: 这个错误通常表示你的计算机内存不足,导致OpenCV无法分配需要的内存。解决此问题的方法如下: 增加计算机内存:如果你的计算机内存过小,可以考虑增加内存来解决该问题。 释放不需要的内存:在运行大型程序时,你可以尝试释放一些不需要的内存,如关闭

    2024年02月21日
    浏览(30)
  • python opencv之图像分割、计算面积

    以下代码是一个基于K-means聚类算法进行图像分割的实现。通过读取一个彩色图像,将其转化为二维数组形式。然后使用K-means算法对像素点进行聚类,聚类个数为7。根据聚类后的标签值对像素点进行着色,并创建掩膜图像。接着使用形态学开运算和闭运算去掉周围的绿色点和

    2024年02月06日
    浏览(30)
  • OpenCV(三十三):计算轮廓面积与轮廓长度

    1.介绍轮廓面积与轮廓长度        轮廓面积(Contour Area)是指轮廓所包围的区域的总面积。通常情况下,轮廓面积的单位是像素的平方。         轮廓长度(Contour Length)又称周长(Perimeter),表示轮廓的闭合边界的长度。轮廓的边界可以看作是由一系列相邻像素点组成的

    2024年02月09日
    浏览(27)
  • 前端VUE框架通过Cesium加载3dtiles,计算3dtiles的面积

    前端VUE框架通过Cesium加载3dtiles,计算3dtiles的面积完整代码 前端开发中,使用Vue框架可以帮助开发者更高效地开发复杂的Web应用程序,并且越来越多的项目开始集成三维地球数据可视化。Cesium是一个开源的JavaScript库,可以轻松地实现地球数据的可视化,同时支持3D场景的绘制

    2024年02月08日
    浏览(37)
  • opencv计算植物叶面积_叶直径_叶周长_python

    项目简介 实习方法 源码分享 利用python自带的opencv库来计算植物叶片的叶面积、叶直径和叶周长,拍摄图片就可以直接得到真实的叶面积、叶直径和叶周长。 首先,我们需要这样拍摄一张植物的图片, 需要一个黑色的底板,一张A4纸,拍摄时需要将植物叶面放平,A4纸的四个

    2024年02月04日
    浏览(29)
  • opencv-20 深入理解HSV 色彩空间(通过指定,标记颜色等来拓展ROI区域)

    RGB 色彩空间是一种被广泛接受的色彩空间,但是该色彩空间过于抽象,我们不能够直接通过其值感知具体的色彩。 我们更习惯使用直观的方式来感知颜色,HSV 色彩空间提供了这样 的方式。 通过 HSV色彩空间,我们能够更加方便地通过色调、饱和度和亮度来感知颜色。 其实,

    2024年02月15日
    浏览(34)
  • 定积分求平面区域的面积

    前置知识:黎曼积分的概念 介绍 由前置知识可得,黎曼积分可以求 x = a x=a x = a , x = b x=b x = b , x x x 轴和 y = f ( x ) y=f(x) y = f ( x ) 围成的图形, S = ∫ a b f ( x ) d x S=int_a^bf(x)dx S = ∫ a b ​ f ( x ) d x 那么,我们就可以用这个方法来求平面区域的面积。 例题 设平面区域 D D D

    2024年02月12日
    浏览(26)
  • 定积分求平面区域的面积习题

    前置知识:定积分求平面区域的面积 习题 设平面区域由曲线 y = x 2 − 1 y=x^2-1 y = x 2 − 1 和 y = − x 2 + 1 y=-x^2+1 y = − x 2 + 1 围成,求 D D D 的面积 S S S 解: qquad 两曲线的交点为点 ( − 1 , 0 ) (-1,0) ( − 1 , 0 ) 和点 ( 1 , 0 ) (1,0) ( 1 , 0 ) ,由此可得 S = ∫ − 1 1 [ ( − x 2 + 1 ) − (

    2024年02月12日
    浏览(33)
  • VTK 几何体连通区域分析 vtkPolyDataConnectivityFilter

    前言:    vtkPolyDataConnectivityFilter 使用过,但网上没有看到完事的教程;这里整理一下;   提取数据集中连通的多边形数据。 该类是一个滤波器,提取cell(区域) - 拥有公共点或者满足某个阈值 该类在提取连通区域时候有如下6种模式:    1 )提取数据集中的最大(最多

    2024年02月02日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包